29

Windows Sever 2003 の IIS 6 から Windows 2008 の IIS 7 に約 100 の ASP.net サイトを移行しました。有効な DateTime として認識されます。」これは、サイトの CurrentCulture がデフォルトで「en-US」に設定されているため、英国のユーザーが予期しない形式で日付を入力しているという事実まで追跡しました。

質問は、どこから en-US を取得しているのかということです。上から順に、[コントロール パネル] > [地域と言語] を見ると、すべて英語 (英国) に設定されています。サイトの web.configs に <globalization> セクションがないか、<globalization culture="auto" uiCulture="auto" /> として設定されています。「IIS7 - .Net グローバリゼーション」では、すべてのサイトのカルチャが「不変の言語 (不変の国)」に設定されています。

カルチャを「en-US」に設定している場所はどこにも見つかりません...しかし、何かがあります。

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

<globalization culture="en-GB" uiCulture="en-GB" /> をすべての web.config に追加することで問題を解決できますが、約 100 個の web.config を手動で編集する必要はありません。en-GB に設定されているサーバー OS 設定からカルチャを継承したくありません。

何か不足していますか?

4

9 に答える 9

27

これらは、検索できる代替の場所です。

カルチャを「en-US」に設定している場所はどこにも見つかりません...しかし、何かがあります。

Thread.CurrentThread.CurrentCulture.Name は「en-US」を出力しています Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencySymbol は「$」を出力しています

メソッドを探してみてくださいInitializeCulture。このメソッドは ASP.Net ページでオーバーライドされ、Culture を次のように設定します。

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();
}

次のアセンブリ属性を探してみてください。

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

次のページ ディレクティブ属性を探してみてください。

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

web.configs を調べてみてください:

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

編集 1

言語を設定しようとしている HttpHandlers または HttpModules を探してみてください

web.config 階層を調べてみてください (サーバーで<wwwroot>は、IIS Web サイトのルート フォルダーを意味します)。

  1. グローバル機。<windir>\Microsoft.NET\Framework\<ver>\Config\Machine.config
  2. ルート Web 構成。<windir>\Microsoft.NET\Framework\<ver>\Config\Web.config
  3. Webサイト。<wwwroot>\Web.config
  4. ウェブアプリケーション。<wwwroot>\<webapp>\Web.config
  5. フォルダ。<wwwroot>\<webapp>\<dir>\Web.config

複数のサーバー (Web ファーム) がある場合は、正しいサーバー (構成を確認しているサーバー) にリダイレクトされていることを確認します。これを行うには、目的のサーバーの IP を使用するか、ホスト ファイルを構成します。クライアント コンピュータ

于 2012-06-21T09:31:31.837 に答える
5

私は同じ問題を抱えていました。何時間も経った後、地域設定が正しいにもかかわらず、すべての予約済みアカウント (ASP.NET など) の元のカルチャも変更する必要があることがわかりました。

これは、[地域の設定]の [管理] タブにある[設定のコピー...]ボタンを使用して行います。チェックボックス「ようこそ画面とシステムアカウント」を有効にすると、設定がコピーされます。

于 2016-06-30T06:51:50.837 に答える
4

ルート web.config (windir\Microsoft.NET\Framework\ver\Config\Web.config) にグローバリゼーション セクションを追加し、en-GB に設定すると、問題が解決し、他のサイトに伝播します。私の問題をちょっと解決します。ただし、デフォルトで en-US がどこから取得されているかはまだ説明されていませんが、うまくいくはずです。ありがとう。

于 2012-06-21T10:32:29.303 に答える
3

.Net Web アプリケーションは、ブラウザーの既定のカルチャを取得しています。たとえば FF では、デフォルトの言語は下の画像のように設定されています。言語の FF 設定

そのため、ブラウザーからのもの以外のサイトのカルチャが必要な場合は、ページの InitializeCulture メソッドで (BasePage を作成し、以下のコードを保持して、この BasePage から既存のページを継承します)。

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();
        }
    }
于 2016-04-05T16:18:36.703 に答える
2

これは、アプリケーション プールまたは Web アプリケーションの実行に使用されるシステム アカウントのカルチャに由来する可能性があります。

このリンクを確認してください: IIS と ASP.NET の間の異なるカルチャ設定

于 2015-06-12T14:22:50.160 に答える
1

私の場合、アプリケーション プールは、現在のカルチャが en-GB に設定されているドメイン ユーザーとして実行されており、アプリケーションは en-GB の日付形式で正常に動作しました。

代わりに Network Service で実行されるようにアプリ プールを変更したところ、アプリが en-US カルチャを使用するようになったため、DateTime.Parse 呼び出しが突然中断されました。IIS カルチャがどのようにユーザー固有であるかについて、それを説明するいくつかの SO 投稿 (例) を見ました。

IIS マネージャーでルート要素の .NET グローバリゼーションを開き、カルチャと UI カルチャの両方を英語 (en-GB) に設定すると、修正されました。

于 2018-09-18T08:07:40.933 に答える
0

誰かが同じ問題を抱えているのを助けるためだけに....

IIS カルチャの変更を試みた後、グローバリゼーションを設定しましたが、これまでのところ問題なく、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;
} 
于 2013-12-13T15:25:07.063 に答える
0

私もこの問題を抱えていましたが、解決しました。次の値を設定する必要があります。

CultureInfo.DefaultThreadCurrentCulture = "en-GB";
CultureInfo.DefaultThreadCurrentUICulture = "en-GB";
于 2020-07-05T13:04:32.327 に答える