Bon moyen de changer la langue de ressources dynamiquement à la demande
J'ai un ASP.NET l'API Web application qui devrait réagir à l'utilisateur-tête Accept-Language de façon appropriée.
Actuellement, les chaînes de caractères sont stockées dans le resx et l'accès à la compilation d'une manière sûre par le biais de Visual Studio de la classe générée. Ce que je voudrais faire est de conserver l'approche actuelle et de créer des assemblys satellites pour chaque version traduite de resx. Ensuite, pour analyser l'utilisateur-tête Accept-Language pour voir ce que les langues de l'utilisateur accepte et charge les ressources de la langue demandée à partir de l'assembly satellite.
Je suppose que j'ai pu mettre en œuvre toutes ce problème moi-même en créant un ensemble de spécifique à la langue ResourceManager
des objets à l'aide de la ResourceSet
mais alors il ne serait pas possible de la faire au moment de la compilation de la sécurité, depuis Visual Studio prend en charge automatiquement la mise à jour de la classe pour fichier resx.
Quelle serait la meilleure façon de choisir la langue localisée des ressources de façon dynamique?
Vous devez vous connecter pour publier un commentaire.
À partir de la lecture de votre question, je ne vois pas ce que ASP.NET n'offre pas automatiquement. Vous pouvez configurer votre ASP.NET (si WebForms ou MVC) pour utiliser le
accept-language
en-tête de demande et définir les UICulture (qui aura une incidence sur quel satellite de l'assemblée est chargé par le ResourceManager) et de la Culture (qui aura un impact sur les paramètres régionaux dépendant de la mise en forme et l'analyse des données telles que les dates et les numéros) de manière appropriée.Pour configurer votre application pour utiliser le
accept-language
liste pour définir à la fois UICulture et de la Culture pour chaque demande, (comme par cette page MSDN), configurez votre site web.config comme ceci:Il y a aussi un équivalent de configuration par page.
Puis, comme par le Des Ressources De Secours processus, si votre application contient un assembly satellite pour la mise en correspondance de la culture (ou, à défaut, son parent culture neutre), il sera utilisé par le Gestionnaire de Ressources. Si non, alors vos ressources par défaut sera utilisé (en anglais si c'est votre langue de base).
Accept-Language: it,de,en;q=0.5
et ASP.NET impossible de trouver une ressource demandée en langue italienne, il n'essaie pas allemand, mais retombe à la culture neutre. Tout les moyens de remédier à ce problème?var orderedValidAcceptLanguages = AcceptLanguage.Parse(httpContext.Request.Headers["Accept-Language"]).Where(x => x.IsValid).OrderByDescending(x => x.Q).ToList();
ResourceManager
objets de différentes cultures, comme indiqué dans ma question, ou une autre approche?Thread.CurrentThread.CurrentUICulture = new CultureInfo(cultureName);
. Vous pouvez également changer la culture pour la mise en forme/analyse, mais elle nécessite une culture spécifique (par exemple, "de-de" est OK, mais "de" ne l'est pas). Comme ceci:Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(cultureName);
Vous pourriez écrire une
HttpModule
qui détecte la langue de l'en-tête, et définit le thread en cours de culture.ResourceManager
et al va déterminer la bonne version localisée à utiliser le fil de la culture.