2009-08-24 10 views
6

Tenemos un archivo de recursos con muchas cadenas traducidas que se utilizan en varios lugares de nuestra aplicación. ¿Hay una mejor manera de vincular, por ejemplo, el texto de un botón a una determinada cadena?C#: Cómo vincular el texto de un botón de winforms a un recurso

Actualmente sólo estamos haciendo por lo general algo como esto en el constructor, en un controlador de eventos de carga o en un método llamado por uno de esos:

someButton.Text = CommonTexts.SomeString; 
someMenuItem.Text = CommonTexts.SomeOtherString; 

¿Hay una mejor manera de hacerlo? Tal vez en el diseñador? ¿O es esta la forma recomendada de hacerlo?


Solo para hacerle saber cómo hacemos la traducción real: Tenemos un proyecto de biblioteca de clases que solo contiene archivos resx. Los principales archivos de resx están escritos en inglés (por supuesto). Luego abrimos esos archivos base resx en una aplicación llamada ResEx donde nosotros (u otra persona) hacemos la traducción a otros idiomas. Cuando se compila, Visual Studio crea automáticamente ensamblajes para cada idioma que se usan automáticamente según el conjunto de culturas actual. Esto funciona bastante bien, así que realmente no necesito información sobre cómo hacer la traducción y tal (aunque siempre tengo curiosidad por las mejoras, por supuesto). Lo que estoy preguntando es si hay una forma mejor de obtener esas cadenas traducidas del conjunto de recursos y en todas las diversas propiedades Text.

+0

Re, the Edit: La pregunta del contador es: ¿por qué no usa el sistema predeterminado de FormLoad? Está integrado y es invisible. –

+1

Porque me preguntaba si había una mejor manera. – Svish

Respuesta

3

que puede hacer:

using System.Resources; 
using System.Reflection; 

Assembly assembly = this.GetType().Assembly; 
resman = new ResourceManager("StringResources.Strings", assembly); 
btnButton.Text = resman.GetString("ButtonName"); 
+3

Eso sería de la misma manera que yo ya lo hago, excepto que es mucho más complejo: p – Svish

+0

@Thomas: No creo que el póster significara vinculante como en "enlace de datos". – MusiGenesis

+0

En VS2008 (y probablemente en 2005), el administrador de recursos predeterminado que obtiene al agregar un archivo de recursos a su proyecto expone propiedades nombradas por el valor de la clave, de modo que sería simplemente "btnButton.Text = resman.ButtonName", guardando las preocupaciones sobre errores tipográficos en la cuerda. –

0

Su forma es la mejor manera de hacer esto si tiene desarrolladores que no son personalmente fluidez en los idiomas que estás traduciendo su aplicación en. He hecho esto antes con una aplicación en inglés que tuvo que ser traducida al español, portugués y chino (solo hablo una de ellas semi-fluidamente). Los formularios originales se crearon todos en inglés, y en el evento Load del formulario, el código iteraba a través de cada control y buscaba la propiedad Text de cada control en una hoja de cálculo de traducciones, y lo reemplazaba con la traducción adecuada.

La forma incorporada de internacionalizar un formulario (que es básicamente una variante de la herencia de formas) supone que el programador habla con fluidez el idioma al que necesita traducir, lo cual es bastante exagerado, y le exige para ingresar manualmente todos los valores de texto traducido para cada formulario y cada idioma. También hace que su binario sea más grande (potencialmente mucho más grande), ya que agrega un archivo .resx para cada formulario para cada idioma que admita.

0

Prueba esto:

someButton.DataBindings.Add ("texto", CommonTexts, "someString");

1

Hay una buena herramienta llamada LingoBit Localizer que hace el trabajo por la fracción del tiempo que llevaría construir todos los archivos de reasources.

No tiene que preocuparse por otros idiomas mientras está en proceso de desarrollo, simplemente codifica y establece las propiedades como lo haría si estuviera programando para un software unilingüe. Cuando haya terminado, o cuando lo desee, ejecute LingoBit Localizer sobre su aplicación DLL o Windows Form. Esto hará que las cadenas desplegables por el usuario salgan a una grilla dentro de su GUI. Ahora, tal vez un traductor profesional podría utilizar para traducir las palabras si los programadores no conocen el idioma para el que la aplicación debe ser traducida. Entonces, simplemente guarde el proyecto cuando haya terminado. Esto creará un archivo DLL que simplemente agregará a su directorio de implementación binario, luego su aplicación se establecerá automáticamente en el idioma correcto según la información cultural actual en la que se encuentre la aplicación. está instalado más o menos. Esto ahorra mucho tiempo de programación y dolores de cabeza.

Espero que esto ayude a pesar de que no es una solución basada en recursos.

+0

Ese es un enfoque razonable para este problema. Si solo admitieran portugués ... – MusiGenesis

+0

También puedes usar VisualLocalize. Usamos esa herramienta muy a menudo. Lo mejor de esto es que luego puede verificar todos sus diálogos si el texto traducido se ajusta a los controles y si no puede cambiar el tamaño del control solo en este idioma y los nuevos tamaños se guardarán aparte del texto localizado en un ensamblaje de satélite. – PVitt

1

Esto extraerá el valor de la palabra clave Home y se completará en el cuadro Text1.

Text1.Text= Resource.Home.ToString(); 
3

entiendo, es una vieja pregunta, pero aún así, tuve el mismo problema (VS 2010), y uno de los primeros eslabones de Google es este tema.

Para mover todos los textos al archivo de recursos de formularios, debe establecer la propiedad Localizable de winform en True. Y eso es. :) (c) Cap. O.

Cuestiones relacionadas