Saltar al contenido

Multilenguaje en WPF

No busques más por todo internet porque estás al espacio necesario, contamos con la solución que buscas y sin problema.

Solución:

Sigue estos pasos:

1) Colocar todo String fragmentos en un archivo de recursos separado.

Ejemplo: StringResources.xaml:



    
    All Vehicles


2) Haga copias para cada idioma y agréguelas (traducidas) a los diccionarios combinados. No olvide agregar el código ISO del país para facilitar las cosas.

Ejemplo App.xaml:


    
        
            
                
                
                
            
        
    

El último archivo de recursos con cadenas se utilizará para reemplazar partes de texto en el código.

3a) Utilice las partes de texto del String mesa:

Ejemplo Window1.xaml:


    
        

3b) Cargue el recurso desde el código (solo use este código si no desea configurarlo a través de XAML):

void PageLoad()

  string str = FindResource("All_Vehicles").ToString();

4) Cambiar a una nueva cultura al inicio de la aplicación:

Codesnippet de App.xaml.cs:

public static void SelectCulture(string culture)    
      
    if (String.IsNullOrEmpty(culture))
        return;

    //Copy all MergedDictionarys into a auxiliar list.
    var dictionaryList = Application.Current.Resources.MergedDictionaries.ToList();

    //Search for the specified culture.     
    string requestedCulture = string.Format("StringResources.0.xaml", culture);
    var resourceDictionary = dictionaryList.
        FirstOrDefault(d => d.Source.OriginalString == requestedCulture);

    if (resourceDictionary == null)
    
        //If not found, select our default language.             
        requestedCulture = "StringResources.xaml";
        resourceDictionary = dictionaryList.
            FirstOrDefault(d => d.Source.OriginalString == requestedCulture);
    

    //If we have the requested resource, remove it from the list and place at the end.     
    //Then this language will be our string table to use.      
    if (resourceDictionary != null)
    
        Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
        Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
    

    //Inform the threads of the new culture.     
    Thread.CurrentThread.CurrentCulture = new CultureInfo(culture);
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);


Estoy usando la extensión de localización de WPF. Es una forma realmente sencilla de localizar cualquier tipo de DependencyProperty sobre DependencyObjects.

  • está en un estado estable real
  • admite un estilo de escritura tipo encuadernación como Text = LocText ResAssembly:ResFile:ResKey
  • funciona con el mecanismo .resx-fallback (por ejemplo, en-us -> en -> cultura independiente)
  • apoya el forzamiento cultural (por ejemplo, “esto tiene que ser en inglés todo el tiempo”)
  • funciona con propiedades de dependencia normales
  • funciona con plantillas de control
  • se puede usar en XAML (en realidad: P) sin espacios de nombres adicionales
  • se puede utilizar en el código subyacente para vincular valores localizados a controles dinámicos generados
  • implementos INotifyPropertyChanged para uso avanzado
  • apoyos string formato, por ejemplo "this is the '0' value"
  • apoyos prefix y valores de sufijo (actualmente con LocText extensión)
  • está en uso en sistemas productivos (como mi producto de relaciones públicas)
  • El cambio del idioma a runtime afecta NO porción de tiempo
  • se puede utilizar con cualquier archivo de recursos (.resx) en todos los ensamblajes (también el dinámico cargado en tiempo de ejecución)
  • no necesita ningún proceso de inicialización (como “llamar a xyz para registrar un diccionario de localización especial”)
  • está disponible en tiempo de diseño (MS Expression Blend, MS Visual Studio 2008 (Normal y SP1)
  • el cambio del idioma elegido es posible en tiempo de diseño
  • puede localizar cualquier tipo de datos, siempre que un convertidor (TypeConverter) porque existe (se extiende LocalizeExtension)
  • ha incorporado soporte para Text, superior Text, más bajo Text, Images, Brushes, Double y Thickness
  • no afecta a las pérdidas de memoria
  • deja el UID propiedad intacta
  • ofrece una SpecificCulture para usar como IFormatProvider (p.ej (123.20).ToString(LocalizeDictionary.SpecificCulture) = "123.20" o "123,20")
  • ofrece alguna funcionalidad para verificar y obtener valores de recursos en el código subyacente
  • no altera la cultura en Thread.CurrentCulture o Thread.CurrentUICulture (puede cambiarse facilmente)

Si entiendes que ha sido de provecho nuestro artículo, agradeceríamos que lo compartas con el resto juniors de este modo contrubuyes a difundir nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *