netcore net multi language istringlocalizer español asp and c# asp.net internationalization multilingual

c# - multi - netcore set culture



Almacenamiento de idioma en URL o sesión u otro (6)

Estoy desarrollando un sitio multilingüe y me preguntaba cuál es la mejor manera de almacenar el idioma elegido por el usuario.

Ya sea a través de QueryString o debería estar en Session ... o en cualquier otra opción?


Creo que depende mucho de cómo maneje su aplicación (deseos de manejar) los idiomas del usuario. Si sus usuarios tienen que iniciar sesión en su sitio, es probable que tenga una página de configuración de cuenta en algún lugar con un objeto de perfil de usuario apropiado o algo similar detrás. En tal caso, supongo que guardará estas configuraciones en el DB, y cuando el usuario regrese a su sitio obtendrá la información del usuario de alguna manera (es decir, desde una cookie), usted cargará su objeto de perfil de usuario desde el DB. La información se mantendría en una sesión ya que creo que sería la más adecuada en este caso. Si sus usuarios no tienen que iniciar sesión, por lo que básicamente no puede identificarlos directamente, yo almacenaría la configuración de idioma en una cookie. Esto le da a su usuario el valor de que siempre encontrará el sitio en su idioma preferido cuando vuelva más tarde (dado que no elimina las cookies y la duración de la cookie es lo suficientemente larga). Como tercera posibilidad, puede identificar el idioma de los usuarios de acuerdo con la configuración predeterminada de su navegador (igual que "regex" mencionado anteriormente).

Como dije, realmente depende de las necesidades de su aplicación. Lo que debes tener en mente es que

  • los objetos almacenados en la sesión se guardan en el lado del servidor, usando la memoria del servidor. Así que no guardes cosas inútiles en la memoria si no las necesitas. Sin embargo, el objeto de sesión es adecuado para almacenar datos relacionados con la visita y las configuraciones de un usuario.
  • Los datos almacenados en las cookies, o el objeto Viewstate, se envían de un lado a otro entre el navegador del cliente y el servidor web. Esto causa tráfico adicional y puede disminuir el rendimiento.

Adiós


Hay una propiedad que se pasa cuando un navegador realiza una solicitud que podría usar. A esta propiedad se hace referencia en su código al hacer referencia a:

Request.UserLanguages // returns an array

Alternativamente, puede solicitar al usuario que especifique un idioma preferido y guardarlo en una cookie.

En su controlador Page.Load ponga algo como lo siguiente:

string prefLan; if(Request.Cookies["preferedLanguage"] != null) prefLan = Server.HtmlEncode(Request.Cookies["preferedLanguage"].Value);


Querystring no es el lugar correcto para esto, a menos que se lea inicialmente de la cadena de consulta y se almacene en otro lugar.

Guárdelo en una cookie, o si las cookies están desactivadas, guárdelo en sesión o viewstate.

Las "propiedades de perfil" de respuesta de Kevin es una manera fácil de permitir que una biblioteca establecida haga todo lo posible por usted con el mínimo esfuerzo de su parte.


Las propiedades de perfil se crearon específicamente para permitirle almacenar preferencias específicas del usuario. Este sería un buen lugar para almacenar este tipo de datos.


si considera este escenario donde un usuario ha navegado una serie de páginas en "en" y la información del idioma se almacena en la sesión de cookies y las páginas se han almacenado en caché (http, navegador, aplicación).

cuando el usuario cambia el idioma a "cy", se produce un cambio en la página actual, pero cuando el usuario salta de nuevo a una página que visitó previamente (donde los cachés de encabezado caducados no han expirado) cargaría el página en "en" ya que la cadena de consulta no indica el idioma, para que sirva contenido en ese idioma.

Es improbable que un usuario quiera cambiar idiomas con tanta frecuencia, pero como desarrollador, es una escena que debe manejarse.

cualquier idea, no dude en gritar.


Otra consideración que no se menciona en ninguna de las otras respuestas es la Amabilidad del motor de búsqueda. Si usa una URL diferente para cada idioma, como

http://{en|cy}.example.com/subdir/ or http://example.com/{en|cy}/subdir) luego los motores de búsqueda pueden indexar su sitio en múltiples idiomas.