2011-01-31 21 views
9

Parece que hay una serie de enfoques sobre cómo implementar múltiples idiomas en una aplicación WPF. Pero me gustaría obtener más información sobre el método que debería utilizar con los siguientes requisitos:Enfoque para una aplicación WPF multilingüe

  • Es una aplicación PRISM, por lo que varios módulos independientes (ensambles) trabajan juntos. Me gustaría que cada ensamblaje tenga sus propias traducciones de elementos de la interfaz de usuario.
  • Necesito un enfoque simple, sin necesidad de herramientas para generar cosas
  • aún debe ser capaz de utilizar la mezcla para diseñar la interfaz de usuario
  • Opcionalmente poder cambiar el idioma sin reiniciar la aplicación (no es un motivo de ruptura)

¿Alguien me puede aconsejar sobre cómo lograr esto?

Gracias!

Respuesta

3

Mientras tanto me encontré con un proyecto de código abierto que funciona realmente bien: http://wpflocalizeextension.codeplex.com . Simplemente agrega una referencia al dll, agrega los recursos con las traducciones y lo usa en XAML. Funcionó en 5 minutos. Puedo agregar múltiples recursos a módulos individuales; y funciona bien en diseñador de estudio visual y mezcla. Y, la configuración regional se puede cambiar sobre la marcha. Cumple mis requisitos :)

+0

hola allí. Estoy tratando de integrar WPFLocalizeExtension en mi aplicación de prismas también. Pero mi aplicación no pudo resolver los recursos en tiempo de ejecución. En el momento del diseño, está bien.¿Tiene un ejemplo de trabajo que pueda ver? Gracias. –

+0

¿Ha configurado los archivos de recursos como 'recurso incrustado'? –

+0

sí. establecí el modificador de acceso para publicar también, –

4

Un enfoque común consiste en obligar a la propiedad de texto de sus TextBlocks/etiquetas, etc .. a alguna propiedad de un recurso localización definida estáticamente:

<Label Content="{Binding Source={x:Static loc:LanguageContext.Instance}, 
         Path=Dictionary, Mode=OneWay, 
         Converter={StaticResource languageConverter}, 
         ConverterParameter=TextId}" /> 

es decir LanguageContext.Instance expone un diccionario a través de un diccionario propiedad, el convertidor usa el parámetro convertidor dado para buscar el texto identificado mediante TextId.

Este es un enfoque engorroso, y no cumplirá con todos sus requisitos.

Un mejor método es definir su propia extensión de marcado para realizar este tipo de lógica. Hay un par de soluciones que he visto en la web, este artículo CodeProject alta puntuación:

http://www.codeproject.com/KB/WPF/realtime_multilingual.aspx

y una solución similar aquí que proporciona Blend, sobre la marcha de los cambios de idioma, por lo que es probablemente una buena opción para usted:

http://blogs.microsoft.co.il/blogs/tomershamam/archive/2007/10/30/wpf-localization-on-the-fly-language-selection.aspx

con el ejemplo anterior se define una propiedad asociada que identifica la clave del tema traducido, y utiliza la extensión de marcado traducir al identificar las propiedades que se traducen.

NOTA: no se trata sólo de texto que se está traduciendo aquí, a menudo tiene que cambiar colores/gráficos, etc ...

+0

Gracias, el segundo enlace parece un buen enfoque, pero tengo que adaptarlo porque actualmente parece que puede registrar un recurso solo una vez para cada región; y necesitaría múltiples recursos por región, ya que cada módulo registraría su propio recurso. ¡Echaré un vistazo para ver si es factible! –

Cuestiones relacionadas