2012-07-04 12 views
7

Tengo una aplicación WPF (en inglés) y me gustaría que los usuarios seleccionen diferentes idiomas. He leído algunas posibilidades para cambiar idiomas en aplicaciones de tiempo de ejecución, pero solo quiero elegir un idioma durante el tiempo de instalación y nunca lo cambio.aplicación multilingüe wpf

¿Cree que la forma más rápida y fácil de hacerlo es desarrollar diferentes versiones del programa (cambiando solo el lenguaje de texto) y dejar que el usuario seleccione una de ellas durante la instalación? Probablemente, repetir código solo cambiando el cuadro de texto o las etiquetas no es muy elegante, pero tenga en cuenta que tengo la aplicación terminada en inglés y no necesito cambiar el idioma en tiempo de ejecución.

Respuesta

5

creo que la solución propuesta por Aghilas es bueno; pero puede usar StaticResource en lugar de usar DynamicResource en el paso 3, DynamicResource no es necesario en su caso, ya que no va a resolver el idioma mientras se ejecuta la aplicación.

también echar un vistazo a estos artículos que tienen detalles sobre el uso de archivos ResX para la localización en WPF -

Localizing a WPF Application with ResX Files

WPF Localization

WPF Localization Guidance - Whitepaper

21

Puede seguir estos pasos

  1. Creación de los archivos de recursos

    Añadir este archivo a StringResources.xaml directorio de Recursos. La muestra está aquí:

    <ResourceDictionary 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:system="clr-namespace:System;assembly=mscorlib"> 
    
        <system:String x:Key="close">Close</system:String> 
    </ResourceDictionary> 
    

    Puede crear varios archivos, uno para cada idioma.

  2. agrega un recurso (Llame a este cuando se inicia la aplicación)

    private void SetLanguageDictionary() 
    { 
        ResourceDictionary dict = new ResourceDictionary(); 
        switch (Thread.CurrentThread.CurrentCulture.ToString()) 
        { 
         case "en-US": 
         dict.Source = new Uri("..\\Resources\\StringResources.xaml", UriKind.Relative); 
         break; 
         case "fr-CA": 
         dict.Source = new Uri("..\\Resources\\StringResources.fr-CA.xaml", UriKind.Relative); 
         break; 
         default : 
         dict.Source = new Uri("..\\Resources\\StringResources.xaml",UriKind.Relative); 
         break; 
        } 
        this.Resources.MergedDictionaries.Add(dict); 
    } 
    
  3. el uso del recurso, como esto -

    <Button  
        x:Name="btnLogin" 
        Click="btnLogin_Click" 
        Content="{DynamicResource login}" 
        Grid.Row="3" 
        Grid.Column="0" 
        Padding="10" /> 
    
+0

muy útil cuando se almacenan todo el texto una base de datos ¡Gracias! – BendEg

+1

fuente: http://www.codeproject.com/Articles/123460/Simplest-Way-to-Implement-Multilingual-WPF-Applica – Nick

+0

El recurso dinámico no se resuelve en el momento del diseño. Entonces, en mi opinión, ese es un inconveniente de esta solución. – DrMarbuse

0

Si desea utilizar archivos RESX en lugar de diccionarios de recursos, puede hacerlo fácilmente con referencias estáticas en XAML.

<Window x:Class="MyApp.MainWindow" 
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:res="clr-namespace:MyApp.Resources"> 
    <Button Text="{x:Static res:MainWindow.MyTestKey}"> 
</Window> 

En la carpeta Resource es el MainWindow.resx, MainWindow.de.resx, etc., y cada archivo contiene una clave MyTestKey con una traducción.

2

sólo para mejorar @ respuesta correcta de AghilasYakoub, creo que es necesario señalar que el siguiente código debe añadirse al archivo App.xaml aparte de lo que había dicho:

<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Resources/StringResources.xaml"/> 
      <ResourceDictionary Source="Resources/StringResources.fr-CA.xaml"/> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 
Cuestiones relacionadas