
Bug Xamarin IOS 11 al recuperar el idioma del sistema.
Me he fijado que al instalar mi aplicación en IOS 11 siempre se muestra en inglés, ignorando el idioma del sistema al mostrar la interfaz para el usuario.
La función de .net que uso pare recuperar el idioma es:
CultureInfo.DefaultThreadCurrentUICulture.Name;
Al probar en un simulador o terminal con IOS inferior a 11, funciona perfectamente, en mi caso retorna “es-ES”, pero con IOS 11, retorna “EN”.
Al analizar el problema, me he encontrado que es un bug conocido de Xamarin que se puede ver aquí: https://bugzilla.xamarin.com/show_bug.cgi?id=59596 que al momento de escribir, seguia en proceso.
Para solucionar el problema, he implementado en plataforma una función que me retorna el idioma del sistema de forma nativa.
He creado una interfaz para recuperar el valor desde ViewModel.
Interfaz en la PCL (Core)
public interface IDeviceInfo
{
string GetLanguageSystem();
}
Android
public class DeviceInfo : IDeviceInfo
{
public string GetLanguageSystem()
{
return Locale.Default.ToString();
}
}
IOS
public class DeviceInfo : IDeviceInfo
{
public string GetLanguageSystem()
{
return NSLocale.CurrentLocale?.LocaleIdentifier?.ToString();
}
}
UWP
public class DeviceInfo : IDeviceInfo
{
public string GetLanguageSystem()
{
return CultureInfo.DefaultThreadCurrentUICulture.Name;
}
}
Es importante que todos los idiomas soportados por la aplicación este configurado en el archivo Info.plist, si no lo hacemos, la función no retornará bien los valores en IOS 11.
La solución como podes ver, es simples de aplicar, pero tenga en cuenta que este error solo ocurre en IOS 11 y que seguramente estará resuelto en breve.