He estado buscando hacer aplicaciones adecuadas para múltiples lenguajes en C # ya que necesito trabajar en un pequeño proyecto donde este es el caso. He encontrado básicamente dos formas de hacer esto:
Establezca la propiedad Localizable de un formulario en verdadero, establezca la propiedad Language, complete todas las etiquetas y demás, y ya está. El mayor inconveniente que veo en esto es: cómo hacer que otras cosas que no forman parte de un formulario estén listas para varios 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 rellénelo con cadenas. El IDE parece generar una clase para mí automáticamente, por lo que en el código puedo usar Lang.SomeText. El mayor inconveniente que veo en esto es: para cada formulario, necesito configurar todas las etiquetas y otros subtítulos en el código (y no parece que el enlace de datos funcione con estos recursos).
Sin embargo, estoy seguro de que también existen otros métodos para hacer esto.
Entonces, ¿cuál es la mejor práctica? ¿Qué es lo más fácil para aplicaciones pequeñas (algunos formularios, conexión de base de datos, etc.) y qué escala mejor para aplicaciones más grandes?
fuente
Respuestas:
Siempre he utilizado 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:
El archivo / formulario de recursos es más fácil de implementar, solo necesita ingresar los valores en el archivo de recursos, pero encuentro este enfoque más difícil de mantener, ya que las etiquetas están dispersas por toda la aplicación.
El archivo de recursos global le permite centralizar todas las etiquetas (imágenes, etc.) en un archivo (por idioma), pero significa configurar manualmente las etiquetas en el formulario de carga. Este archivo también se puede utilizar para mensajes de error, etc.
Una cuestión de gustos ...
Un último punto, escribo programas en inglés y francés, uso "en" y "fr" y no "en-US" y "fr-FR". No compliques las cosas, los diferentes dilelectos del inglés (americano, inglés, australiano, etc.) tienen pocas diferencias como para usar solo uno (lo mismo ocurre con el francés).
fuente
Recientemente escribí un programa con soporte tanto en alemán como en 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, automáticamente seleccionaba 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 cualquier campo alemán que aún no se haya ingresado aparecería en la aplicación como inglés, ya que el idioma de archivo más no específico es el archivo predeterminado. Al buscar una cadena, va desde la más específica (por ejemplo, .de-DE.resx) a la menos específica (por ejemplo, .resx).
Para obtener sus cadenas, use las llamadas ResourceManager.GetString o ResourceManager.GetObject. La aplicación debería proporcionarle ResourceManager de forma gratuita.
fuente
Para beneficio de otros que puedan encontrar esto (más de 1 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 solo archivo que se puede traducir usando una aplicación independiente gratuita (los traductores pueden descargar esto de mi sitio). El mismo complemento importará las cadenas traducidas de nuevo a su solución. Extremadamente fácil de usar con muchas protecciones integradas, muchas campanas y silbidos y ayuda en línea (no la necesitará mucho). Ver http://www.hexadigm.com
fuente