Preparación de recursos multilingües
Para establecer la localización en una aplicación Avalonia, se utilizan archivos de recursos (.resx) que contienen cadenas traducidas. Comienza creando un archivo de recursos principal, como LocalizedStrings.resx, con claves y valores predeterminados. Luego, genera archivos específicos para cada cultura, siguiendo la convención LocalizedStrings.[código-cultura].resx. Por ejemplo:
LocalizedStrings.resx: Recurso por defecto (p. ej., inglés).LocalizedStrings.es.resx: Recurso para español.LocalizedStrings.fr.resx: Recurso para francés.
Asegúrate de establecer el modificador de acceso de las claves en Public para que sean accesibles desde el código.
Acceso a recursos desde el código C#
En el ViewModel, puedes enlazar las cadenas localizadas directamente desde las clases de recursos generadas. Define una propiedad que recupere el valor usando el identificador de cultura actual. Ejemplo simplificado:
namespace MyApp.ViewModels
{
public class UserViewModel : ReactiveObject
{
public string WelcomeText => LocalizedStrings.GreetingKey;
}
}
Este enlace se actualizará automáticamente si cambia la cultura del subproceso en tiempo de ejecución.
Modificación dinámica del idioma
Para cambiar la cultura activa de la aplicación, establece la propiedad CultureInfo del subproceso actual antes de inicializar la interfaz. Esto se puede hacer en el método OnFrameworkInitializationCompleted de la clase App:
public override void OnFrameworkInitializationCompleted()
{
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new System.Globalization.CultureInfo("es-ES");
base.OnFrameworkInitializationCompleted();
// Resto de la configuración...
}
Al alterar la cultura, las propiedades enlazadas a los recursos se refrescna con los valores corrrespondientes al nuevo idioma.
Uso en archivos XAML
Para consumir recursos directamente en XAML, importa el espacio de nombres de las propiedades y utiliza una extensión estática. Ejemplo:
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loc="using:MyApp.Properties">
<StackPanel>
<TextBlock Text="{x:Static loc:LocalizedStrings.GreetingKey}" />
</StackPanel>
</UserControl>
Alternativamente, puedes enlazar a través de una propiedad en el ViewModel para mayor flexibilidad en la lógica de presentación.