2012-01-09 19 views
6

He encontrado algunos temas similares, pero no obtuve la respuesta que estoy buscando.Cargue todos los recursos de localización en el inicio

Estoy tratando de la internacionalización antes de comenzar un proyecto "más serio" (WinForms). Por lo tanto, actualmente en mi pequeña aplicación de prueba, resolví la localización utilizando ensamblajes satelitales (archivos dll de idioma) y llené los campos de texto de los controles con ResourceManager, y el cambio de idioma se resolvió mediante Thread.CurrentThread.CurrentCulture & Thread.CurrentThread. Métodos actuales de la industria.

CultureInfo ci = new CultureInfo(lang); 
Thread.CurrentThread.CurrentCulture = ci; 
Thread.CurrentThread.CurrentUICulture = ci; 

this.button1.Text = Resources.LocTest.String1; 

me gustaría cargar todos los textos de los recursos en la primera puesta en marcha del programa, no sólo la forma principal, pero todos ellos (también en aquellas formas, que no crea una instancia todavía)! ¿Cómo podría implementar esto? ¿Este procedimiento es factible en absoluto?

Recibí algunos consejos de que debería simplificar todo el proceso de localización, estableciendo la propiedad "localizable" en verdadero y hacer las traducciones. Y la mayoría de los tutoriales siguen de esta manera.

¿Alguien tiene alguna idea, qué método debo usar?

¡Gracias de antemano!

Estoy muy confundido con la localización ...

+1

Básicamente, siempre debe seguir las mejores prácticas y no tratar de reinventar la rueda (lo aburrido).Por lo tanto, es una buena idea utilizar el enfoque estándar, que es el cambio de Localizable a true y dejar que Visual Studio cuide de la creación de administradores de recursos y otras cosas. También ** no debe ** asignar cultivos de hebras, que se deben asignar automáticamente, de lo contrario, el mecanismo de retroceso no funcionará. –

+1

En cuanto a la carga de recursos, todo es posible para aquellos que lo intenten. La única pregunta es por qué en el mundo quieres hacer eso? –

+0

Gracias por su respuesta! Entendí que escribiste ("¡No intentes reinventar la rueda")! Intento seguir las mejores prácticas. En realidad, la única razón por la que quería usar esta versión dll de recursos, ese usuario debe reiniciar la aplicación cuando cambie el idioma ... –

Respuesta

2

Por favor use el segundo método que usted ha mencionado.

Obtuve algunos consejos de que debería simplificar todo el proceso de localización, estableciendo la propiedad "localizable" en verdadero y hacer las traducciones. Y la mayoría de los tutoriales siguen de esta manera.

Porque esta es la forma prevista de cómo Microsoft piensa que la localización debe hacerse en una aplicación de winforms. http://msdn.microsoft.com/en-us/library/y99d1cd3%28v=vs.90%29.aspx

Un problema con su primera solución: ¿Cómo se mantiene que un texto en otro idioma se mostrará correctamente?
Ese es uno de los problemas que Microsoft ha tenido en cuenta. Con una pequeña herramienta que se encuentra en el SDK llamada: WINRES.exe, puede ver los formularios diseñados y escribir la traducción para ellos. http://msdn.microsoft.com/en-us/library/8bxdx003%28v=vs.90%29.aspx

Si desea cambiar el idioma en tiempo de ejecución y actualizar todas formas este artículo tal vez una sugerencia para usted: http://msdn.microsoft.com/en-us/magazine/cc163609.aspx#S9
Las siguientes líneas da una explican actualización howto que la interfaz de usuario:

Dim crm As ComponentResourceManager 
crm = New ComponentResourceManager(GetType(Main)) 
crm.ApplyResources(cmdAddCustomer, cmdAddCustomer.Name) 
crm.ApplyResources(mnuFile, mnuFile.Name) 
crm.ApplyResources(mnuFileAddCustomer, mnuFileAddCustomer.Name) 

La última Se pueden encontrar 3 líneas de este código en cada formulario (localizable = verdadero) en el archivo del diseñador.
Para que pueda especificar una interfaz para un método de actualización, que cada formulario debe implementar, implementar la interfaz y después del cambio de idioma, recorrer el formulario y llamar a estos métodos.

la esperanza que esto podría ayudarle ...

Cuestiones relacionadas