He estado trabajando en .NET (Framework y Core) durante años y estoy buscando portar una aplicación de .NET Framework a .NET Core.
En esta aplicación de .NET Framework, tenemos archivos .resx con miles de etiquetas, traducidos a 5 idiomas. Estos archivos .resx han generado un código fuente de C# que nos permite acceder a ellos de forma estática y segura. La cultura actual de la interfaz de usuario se respeta al hacerlo.
Cuando busco la documentación para la localización en .NET Core (que se encuentra aquí ), las reglas del juego han cambiado enormemente:
¿Soy el único que piensa que esto es masiva e innecesariamente más complejo que lo que teníamos en .NET Framework? Puedo entender de dónde provienen ILocalizer y sus amigos, porque ahora todo debe pasar por una inyección de dependencia. ¿Pero cuerdas mágicas? ¿Archivos Resx por todos lados?
Para ser honesto, estoy constantemente impresionado con la maquinaria subyacente de .NET Core, pero el aspecto de la localización me ha dejado completamente decepcionado. ¿Hay alguien por ahí con una solución sólida y productiva para este problema? Tener etiquetas de tipo seguro es probablemente mi requisito número 1.
¡Gracias por adelantado!
Editar: este es el mensaje de recompensa con mejor formato:
Estoy buscando una solución para la localización en C# que
Si la única solución a estos requisitos es el flujo de trabajo .resx existente, entonces también aceptaría una respuesta autorizada que se base en la documentación oficial o una declaración de una figura con autoridad dentro de Microsoft que mencione explícitamente los archivos de recursos con código C# generado como aceptable, alternativa compatible a la historia de ILocalizer.
Puede continuar usando el estilo antiguo de crear aplicaciones en varios idiomas con .NET Core al tener varios archivos 'resx', aunque la forma preferida de administrar recursos en varios idiomas es usando las interfaces que mencionó. Pero no pude encontrar un documento que mencione que los archivos 'resx' quedarán obsoletos en el futuro.
Creé una API web .Net Core de muestra que usa dos archivos de recursos separados para proporcionar sus cadenas. utiliza un parámetro para determinar su Thread.CurrentThread.CurrentUICulture mediante este código:
[HttpGet] public ActionResult<string> Get(string lang) { Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(lang); return Resource.Test; }como puede ver en estas imágenes, obtengo dos resultados diferentes según mi idioma preferido.