2009-04-28 21 views
6

He agregado varios idiomas usando el breve artículo a continuación.C# Creando una configuración para varios idiomas

Cuando se agrega para el idioma alemán se obtienen las siguientes archivos: formMain.resx formMain.de-DE.resx formMain.Designer.cs formMain.cs

En primer archivo que tendrá recursos para un lenguaje neutral, como cadenas, imágenes, ...

Así que ahora necesita agregar también recursos para las cadenas utilizadas en el código. Agregue un nuevo archivo de recursos y asígnele el nombre formMain.Strings.resx Luego ingresaré un nombre, un par de valores para cada cadena que deba traducirse. Cuando agrega un archivo de recursos, se escribe automáticamente porque otro archivo con el nombre formMain.Strings.Designer.cs se regenera automáticamente cada vez que se cierra el diseñador de resx.

Agregue otro recurso con el nombre formMain.Strings.de-DE.resx. Agregue las mismas claves de nombre del recurso anterior, y simplemente cambie el valor con las correspondientes palabras alemanas. Ahora, para acceder al recurso creado desde la fuente, será así.

MessageBox.Show (formMain_Strings.SameStringName);

Sin embargo, he cambiado mi idioma a tailandés. Todo funciona bien cuando ejecuto mi aplicación en VS.

Sin embargo, tan pronto como agregue un proyecto de configuración e instale en la máquina del cliente, no cambiará el idioma a tailandés y solo mantendrá el idioma predeterminado.

Así que he agregado los archivos de recursos y th-TH dll a la configuración del proyecto. Y todavía tengo el mismo problema.

Packaging file 'Lang.Strings.resx'... 
Packaging file 'MultiLanguage.resources.dll'... 
Packaging file 'MultiLanguage.exe'... 
Packaging file 'Lang.Strings.th-TH.resx'... 

Como todo funciona bien cuando se ejecuta en visual studio. ¿Hay algo que deba hacer para que se ejecute una vez que se haya instalado? Todas las propiedades para cada uno de los archivos que tengo mantienen el valor predeterminado.

Muchas gracias,

=========

static void Main() 
    { 
     System.Threading.Thread.CurrentThread.CurrentUICulture = 
new System.Globalization.CultureInfo("th-TH"); 

     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     Application.Run(new Form1()); 
    } 

Respuesta

10

he encontrado la respuesta

Haga clic en el proyecto de instalación en el Explorador de soluciones y haga clic en Agregar \ Project Output \. Desde el diálogo, seleccione el proyecto para el que desea incluir la localización (sat elite) asambleas y luego seleccione Recursos localizados.

Después de la instalación en la carpeta que instalo, tengo la carpeta TH-TH que incluye el conjunto satélite.

Gracias,

+0

Si me lo permite, será mejor que abandone el Proyecto de configuración tan pronto como sea humanamente posible y que cambie al Windows Installer XML (WiX). Envié un producto usando un proyecto de instalación una vez. Nunca más. Nunca más. – Promit

+0

Acabo de echarle un vistazo rápido a WiX y tampoco incluye el dll de recursos localizados en el paquete de instalación. Parece que los recursos localizados en cualquier tipo de proyecto de configuración simplemente no funcionan (estoy trabajando en un proyecto de VC++ aquí). – galmok

1

Trate de añadir en este en el inicio de la aplicación (si no está ahí):

Thread.CurrentThread.CurrentUICulture = CultureInfo.CurrentCulture; 

Aquí es un short article discutiendo algunas de las opciones de cómo hacer que esto funcione, y las opciones para seleccionar la configuración regional en tiempo de ejecución.


Edición después de comentarios:

Asegúrese de que el ensamblado satélite se encuentra en el lugar adecuado, y construido correctamente. De ese artículo al que me he referido:

"Cuando .NET runtime inicia una aplicación, busca un posible archivo de ensamblaje de satélites. Un archivo de ensamblaje de satélites es un archivo de ensamblaje solo de recursos que tiene la extensión .resources.dll en lugar de .exe ir. dll (si el ensamblaje principal es una biblioteca) .Los archivos de ensamblaje de satélites siempre se ubican en un subdirectorio específico del idioma del directorio principal de la aplicación. Si el archivo de aplicación es Converter.exe, el archivo de ensamblaje de satélite japonés es ja \ Converter.resources.dll."

Hay algunas cosas que debes comprobar aquí. Comprueba el nombre del ensamblaje. También asegúrate de que esté en la ubicación correcta. En tu caso, debe estar en un subdirectorio th-TH con el nombre apropiado. en virtud de su ejecutable. Si está ahí, debe ser encontrado y utilizado correctamente.

Aquí es another good source of information sobre este tema.

+0

Hola. Ya he agregado esto a mi evento de carga de formularios. Todo funciona bien en Visual Studio. Solo cuando instalo en la computadora del cliente. public Form1() { System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo ("th-TH"); InitializeComponent(); } – ant2009

+0

Intenta moverlo a tu rutina Main() antes de cargar tu formulario. Creo que tenerlo en form_load es demasiado tarde ... en ese momento, las asambleas ya se han cargado y elegido. –

+0

Hola. Lo he eliminado de form_load y lo puse en mi main. Sin embargo, funciona en Visual Studio. Pero tan pronto como instalo en la computadora de los clientes, solo muestra el idioma predeterminado y no el tailandés. En mi primera publicación agregué mis archivos de recursos y resource.dll. Debería estar haciendo eso? – ant2009

Cuestiones relacionadas