2008-09-23 18 views
89

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, encontré dos formas de hacerlo:¿La mejor práctica para hacer una aplicación multilingüe en C#/WinForms?

Establezca la propiedad Localizable de un formulario en verdadero, establezca la propiedad del Idioma, complete todas las etiquetas y demás, y estará "listo". 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 etiquetas y otros títulos en el código (y no parece que el enlace de datos funcione con estos recursos).

Estoy seguro, sin embargo, 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?

+2

He notado que las preguntas más constructivas (u otras preguntas "no válidas para SO") son una de las preguntas más valiosas :) Esta también es una buena pregunta (creo que los votos prueban que) Aquí está una buena demostración de cómo utilizar el lenguaje de múltiples complemento para el soporte multi idioma https://www.youtube.com/watch?v=SNIyP1QQdVs – Prokurors

+0

es tan difícil de reconstruir todos los fragmentos de conocimiento en torno a internet veces, y yo encuentra esta pregunta invaluable en este momento. Seguramente hay momentos en que cerrar preguntas suaves es menos constructivo que dejarlas abiertas, y creo que esta es una de esas veces. :) –

Respuesta

18

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

he utilizado de dos maneras diferentes:

  • Un archivo de recursos por cada forma de
  • un recurso global de archivos

El archivo de recursos/forma, es más fácil de implementar, es necesario sólo para ingrese los valores en el archivo de recursos, pero considero que este enfoque es más difícil de mantener, ya que las etiquetas están dispersas en 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 la carga del formulario. Este archivo también se puede utilizar para mensajes de error, etc.

una cuestión de gusto ...

Un último punto, escribir programas en Inglés y Francés, yo 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).

+2

A veces tienes que preocuparte por los dialectos. Por ejemplo, los caracteres chinos son completamente diferentes en chino tradicional (Taiwán) frente a chino simplificado (China continental). – MarkJ

+1

@MarkJ [documentación de MSDN] (http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo (v = vs.80) .aspx) menciona que el chino tradicional y el chino simplificado no son dialectos (país/región) pero culturas neutrales. MSDN: "Una cultura neutral es una cultura que se asocia con una lengua, pero no con un país/región de una cultura específica es una cultura que se asocia con un idioma y un país/región Por ejemplo,.. 'Fr' es un neutro cultura y "fr-FR" es una cultura específica. Tenga en cuenta que "zh-CHS" (chino simplificado) y "zh-CHT" (chino tradicional) son culturas neutrales ". – broadband

+0

poco hice esto con la ayuda de [link] (http://www.codeproject.com/Articles/15248/Globalization-of-Windows-Applications-in-Minute), 2 pasos que no se mencionan allí: 1. Haga clic en todas los archivos .resource y establecer la propiedad "Build Action" en "Content". 2. Haga clic en todos los archivos .resource y establezca la propiedad "Copiar en el directorio de salida" en "Copiar siempre". – Sourav

9

Recientemente escribí un programa 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 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.

4

Para el beneficio de otros que se puedan encontrar con esto (1+ años 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 en el que va a extraer todo ".resx" cadenas de cualquier solución arbitraria y cargarlos en un solo archivo que puede ser traducido utilizando una aplicación independiente libre (traductores pueden descargar desde 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

+0

¡Esto debe agregarse como función nativa a visualstudio! ¡Excelente software! – Caverna

+0

Muchas gracias (apreciado). Hubiera estado de acuerdo con usted antes de comenzar el producto (hace aproximadamente 10 años) pero si MSFT lo implementara hoy, me sacaría del negocio :) – Larry

Cuestiones relacionadas