CurrentCulture incorrectement par défaut à en-US dans ASP.net

Je viens de migrer autour de 100 ASP.net sites D'IIS 6 sur Windows Sever 2003 à IIS 7 sur Windows 2008. Je viens de remarquer que divers morceaux de code qui utilisent des choses comme DateTime.Parse ont commencé à lancer des erreurs "String n'a pas été reconnu comme un DateTime valide". J'ai suivi cela jusqu'au fait que la culture actuelle des sites est par défaut 'en-US' et donc mes utilisateurs Britanniques saisissent des dates dans un format inattendu.

La Question Est, d'où viennent-ils en-US? En commençant par le haut, si je regarde dans 'Panneau de configuration > région et langue' tout est réglé sur anglais (ROYAUME-UNI). Web.les configurations des sites n'ont pas de section ou l'ont définie comme . Dans 'IIS7 -. Net Globalization', tous les sites ont leur culture définie sur ' Invariant Language (Invariant Country)'.

Je ne trouve nulle part où la culture est définie sur 'en-US'... mais une chose est.

Thread.CurrentThread.CurrentCulture.Name is outputting 'en-US'
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol is outputting '$'

Je peux corrigez le problème en ajoutant à chaque web.config mais je ne veux vraiment pas avoir à éditer à propos de 100 web.les configs! Je ne veux pas hériter de la culture des paramètres du système d'exploitation du serveur, qui sont définis sur en-GB.

Est-ce que je manque quelque chose?

24
demandé sur Siegemos 2012-06-21 13:12:05

7 réponses

Ce sont des endroits alternatifs où vous pouvez rechercher:

Je ne trouve nulle part où cela met la culture à "en-US"... mais une chose est.

Thread.CurrentThread.CurrentCulture.Name est sortie 'en-US' Fil.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol produit '$ '

Essayez de chercher la méthode InitializeCulture, cette méthode est remplacée dans ASP.Net pages pour définir la Culture comme:

protected override void InitializeCulture()
{
    var hidden = this.Request.Form["hidden"];
    var culture = this.Request.Form[hidden];
    if (!string.IsNullOrWhiteSpace(culture))
    {
        this.Culture = culture;
        this.UICulture = culture;
    }

    base.InitializeCulture();
}

Essayez de chercher le attributs d'assemblage suivants:

    [assembly: AssemblyCulture("en-US")]
    [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]

Essayez de rechercher les attributs de directive de page suivants:

    <%@ Page Culture="en-US" UICulture="en-US" Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

Essayez de regarder dans le web.les configs:

<globalization uiCulture="en-US" culture="en-US" enableClientBasedCulture="false" />

Édition 1

Essayez de rechercher HttpHandlers ou HttpModules en essayant de définir la langue

Essayez de regarder sur le web.hiérarchie de configuration (sur le serveur, <wwwroot> signifie le dossier racine de votre Site Web IIS)

  1. machine globale. <windir>\Microsoft.NET\Framework\<ver>\Config\Machine.config
  2. configuration Web racine. <windir>\Microsoft.NET\Framework\<ver>\Config\Web.config
  3. site Web. <wwwroot>\Web.config
  4. application Web. <wwwroot>\<webapp>\Web.config
  5. dossier. <wwwroot>\<webapp>\<dir>\Web.config

Si vous avez plusieurs serveurs (Web farm), vérifiez que vous êtes redirigé vers le bon serveur (celui que vous vérifiez la configuration), afin de le faire, vous pouvez utiliser l'adresse ip du serveur souhaité ou configurer vos fichiers hôtes dans votre ordinateur client

25
répondu Jupaol 2012-06-21 09:48:54

Si j'ajoute une section de mondialisation dans le Web racine.config (windir \ Microsoft. NET \ Framework \ ver \ Config \ Web.config), défini sur en-GB, il résout mon problème et se propage vers les autres sites. Ce qui résout un peu mon problème. N'explique toujours pas d'où il vient par défaut, mais il devrait faire l'affaire. Grâce.

4
répondu Siegemos 2012-06-21 10:32:29

Il peut provenir de la culture d'un compte système utilisé pour exécuter le Pool D'applications ou L'Application Web.

Vérifier ce lien: différents paramètres de culture entre IIS et ASP.NET

2
répondu krlzlx 2015-06-12 14:22:50

L'application Web. Net reprend la culture par défaut de votre navigateur. Par exemple, dans FF, la langue par défaut est définie comme indiqué dans l'image ci-dessous. FF paramètres de langue

Donc, si vous voulez la culture de votre site autre que celle du navigateur, dans la méthode InitializeCulture de la page (créez une page de base et gardez le code ci-dessous et héritez des pages existantes de cette page de base).

protected override void InitializeCulture()
    {
            System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("en-GB");
        System.Threading.Thread.CurrentThread.CurrentCulture = System.Threading.Thread.CurrentThread.CurrentUICulture;

            base.InitializeCulture();
        }
    }
2
répondu Nirav Vyas 2016-04-05 16:18:36

J'ai eu le même problème et après de nombreuses heures j'ai découvert que même si les paramètres régionaux étaient corrects, j'avais aussi besoin de changer la culture d'origine pour Tous les comptes réservés (par exemple ASP.NET).

Cela se fait via le bouton " copier les paramètres..." sous l'onglet administratif dans paramètres régionaux . Les paramètres sont copiés si vous activez la case à cocher " Écran D'accueil et comptes système ".

2
répondu SocratesG 2016-06-30 06:51:50

, Juste pour aider quelqu'un a le même problème....

Après avoir essayé de changer la Culture IIS, mis la mondialisation et jusqu'à présent unsecessfully, Je l'ai fait dans Global.asax:

void Application_BeginRequest(Object sender, EventArgs e)
{
    System.Globalization.CultureInfo newCulture = (System.Globalization.CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture.Clone();

    newCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";
    newCulture.DateTimeFormat.DateSeparator = "/";

    System.Threading.Thread.CurrentThread.CurrentCulture = newCulture;
} 
0
répondu Caio 2013-12-13 15:25:07

Dans mon cas, mon pool d'applications fonctionnait en tant qu'utilisateur de domaine, dont la culture actuelle était définie sur en-GB, et l'application fonctionnait bien avec le format de date en-GB.

J'ai changé le pool d'applications pour être exécuté sous le service réseau à la place et soudainement le DateTime.Les appels d'analyse se brisaient alors que l'application utilisait maintenant la culture en-US. J'ai vu quelques messages SO ( par exemple ) sur la façon dont les cultures IIS sont spécifiques à l'utilisateur, ce qui explique cela.

Ouverture de la mondialisation. net de l'élément racine dans IIS Manager et la mise à la fois la Culture et la culture de L'interface utilisateur en anglais UK (en-GB) l'ont corrigé pour moi.

0
répondu demoncodemonkey 2018-09-18 08:07:40