2012-10-04 20 views
10

Tengo 2 archivos de recursos, uno con inglés y otro externo. Cuando llamo alEl método ResourceManager.GetString() devuelve una cadena incorrecta de diferentes conjuntos

ResourceManager.GetString("Hello") 

del archivo .Designer.cs, siempre devuelve la traducción al inglés. He revisado mi configuración regional e idioma, etc. y todo está correcto.

devuelve cadenas debidamente traducidas de mi ensamblaje principal, pero desde ensamblajes cargados siempre devuelve el inglés.

+0

¿Cómo se ha marcado el idioma? Se debe establecer usando UICulture. ¿Has hecho esto? –

+0

¿Puedes publicar el código que utilizas para crear instancias de ResourceManager? – tranceporter

+0

Sí, establecer el idioma, todo lo correcto. Resulta que tenerlo como un recurso integrado es el problema. Parece ignorar la configuración regional y cargar el inglés. Tenerlo como recurso lo resuelve y se carga el idioma correcto. solo sucede con ensamblajes integrados, investigando por qué ahora. – pengibot

Respuesta

9

Esto es lo que estaba pasando. Tuve un ensamblaje con varios archivos de recursos de traducción. Estos fueron todos los recursos integrados.

Cuando compilé el ensamblado, estaba colocando el inglés predeterminado dentro de su .dll. En cuanto a los otros idiomas, estaba creando carpetas, fr, da, de, etc. con los idiomas en.

Tuve que mover todo esto también si quería que fuera recogido por mi aplicación principal que se estaba cargando en todas estas otras asambleas. ¡Pensé que cuando le dije a la asamblea que todos eran archivos de recursos incrustados, en realidad los insertaría!

Ahora tengo un AssemblyLoader que carga todos los archivos .dll requeridos cuando no puede encontrarlos desde sus ubicaciones actuales, el empaquetado se determinará sobre si quiero incluir todos los idiomas o seleccionar los que quiero antes de construir el proyecto. Más trabajo de lo que esperaba, pero resuelto al final.

Cualquiera tiene alguna pregunta, no dude en preguntar.

+0

¿Cómo exactamente lo hizo para resolver esto? Estoy teniendo este problema exacto. –

+0

¿configuró el idioma neutral de la aplicación? tal vez ese fue tu problema – batmaci

2

No estoy seguro de cómo está instanciando ResourceManager, pero cuando llama a ResourceManager.GetString(), puede especificar CultureInfo, que le ayuda a buscar la cadena en la configuración regional correcta. Así que usted puede hacer algo como:

var string = ResourceManager.GetString("ResourceKey", new CUltureInfo("en-GB")); 

Esto se asegurará de que la clave es la cadena del archivo de recursos específicos en-GB.

+0

Mi problema era que esos archivos de recursos con traducciones extranjeras no se estaban cargando. Descubrí que esto se debía a que estaba empaquetándolos en archivos DLL separados dentro de cada carpeta de idiomas, lo que tiene sentido, pero pensé que los habría incrustado en mi .dll en primer lugar – pengibot

2

La primera sobrecarga de GetString, ResourceManager.GetString(string), utiliza CurrentUICulture (Thread.CurrentThread.CurrentUICulture) del subproceso actual.

Haciendo referencia a MSDN: -

El recurso que se devuelve es localizado para la cultura de interfaz de usuario de la rosca actual, tal como se define por la propiedad CurrentUICulture.

En un subproceso en segundo plano, no asuma CurrentUICulture el hilo es el mismo que CurrentUICulture su principal (o IU) de hilo.

Una mejor manera de acceder al recurso desde un subproceso de fondo es usar algo como lo siguiente para obtener la cadena localizada correcta: -

var localString = Properties.Resources.ResourceManager.GetString("ResourceKey", CultureInfo.CurrentCulture); 
0

En mi caso fue un problema con resx-archivo.cadenas de recursos no válidos tenían formato incorrecto en el resx-archivo:

<data name="HeaderColumnsCountGreaterThenDataColumnsCountTestData" xml:space="preserve"> 
    <settings> 
    Month Date Department 
    01.05.2015 01.05.2015 OIR 
    01.05.2015 02.05.2015 OIR 
    </settings> 
</data> 

formato correcto:

<data name="HeaderColumnsCountGreaterThenDataColumnsCountTestData" xml:space="preserve"> 
    <value> 
    Month Date Department 
    01.05.2015 01.05.2015 OIR 
    01.05.2015 02.05.2015 OIR 
    </value> 
</data> 
Cuestiones relacionadas