¿La mejor práctica para hacer una aplicación multilingüe en C # / WinForms?

He estado buscando aplicaciones adecuadas para varios idiomas en C #, ya que necesito trabajar en un proyecto pequeño donde este es el caso. Básicamente, he encontrado dos formas de hacer esto:

Establezca la propiedad Localizable de un formulario en true, establezca la propiedad Language, complete todas las tags y demás, y estará “hecho”. El mayor inconveniente que veo en esto es cómo hacer que otras cosas que no son parte de un formulario estén listas para múltiples idiomas (por ejemplo, ventanas emergentes, archivos de registro o ventanas, etc.).

Cree un archivo de recursos, por ejemplo ‘Lang.en-us.resx’ y uno para cada idioma, por ejemplo ‘Lang.nl-nl.resx’ y llénelo con Strings. El IDE parece generar una clase automáticamente para mí, así que en el código puedo usar Lang.SomeText. El mayor inconveniente que veo en esto es que para cada formulario necesito establecer todas las tags y otros títulos en el código (y no parece que el enlace de datos funcione con estos recursos).

Estoy seguro, sin embargo, de que hay otros métodos para hacer esto también.

Entonces, ¿cuál es la mejor práctica? ¿Qué es más fácil para aplicaciones pequeñas (algunas formas, conexión a bases de datos, etc.) y qué escalas son mejores para aplicaciones más grandes?

Siempre he usado archivos de recursos para aplicaciones en varios idiomas.
Hay muchos artículos en la web que explican cómo usarlos.

He usado dos formas diferentes:

  • Un archivo de recursos por formulario
  • Un archivo de recursos global

El archivo / formulario de recursos es más fácil de implementar, solo necesita ingresar los valores en el archivo de recursos, pero considero que este enfoque es más difícil de mantener, ya que las tags están dispersas en toda la aplicación.

El archivo de recursos global le permite centralizar todas las tags (imágenes, etc.) en un archivo (por idioma), pero significa configurar manualmente las tags en la carga del formulario. Este archivo también se puede usar para mensajes de error, etc.

Una cuestión de gusto …

Un último punto, escribo progtwigs en inglés y francés, uso “en” y “fr” y no “en-US” y “fr-FR”. No compliques las cosas, las diferentes dilecciones del inglés (estadounidense, inglés, australiano, etc.) tienen pocas diferencias suficientes para usar solo una (lo mismo vale para el francés).

Recientemente escribí un progtwig con soporte en idioma alemán e inglés. Me sorprendió descubrir que si simplemente nombraba mis recursos en inglés LanguageResources.resx y mis recursos en alemán LanguageResources.de.resx, seleccionaba automáticamente el idioma correcto. El ResXFileCodeGenerator se encargó de todo por mí.

Tenga en cuenta que los campos en los dos archivos eran los mismos y que los campos alemanes aún no ingresados ​​aparecerían en la aplicación en inglés, ya que el lenguaje de archivo más no específico es el archivo predeterminado. Cuando busca una cadena, va de lo más específico (por ej., DEDEres) a lo menos específico (por ejemplo, RESAR).

Para obtener sus cadenas use las llamadas ResourceManager.GetString o ResourceManager.GetObject. La aplicación debería darle el ResourceManager gratis.

Para el beneficio de otros que se puedan encontrar con esto (más de un año después de la última publicación), soy el autor de un producto de localización profesional que hace que todo el proceso de traducción sea extremadamente fácil. Es un complemento de Visual Studio que extraerá todas las cadenas “.resx” de cualquier solución arbitraria y las cargará en un único archivo que se puede traducir utilizando una aplicación independiente y gratuita (los traductores pueden descargarla de mi sitio). El mismo complemento importará las cadenas traducidas a su solución. Extremadamente fácil de usar con muchas protecciones incorporadas, muchas campanas y silbatos, y ayuda en línea (no la necesitará mucho). Ver http://www.hexadigm.com