方法: ASP.NET Web ページのグローバリゼーション用のカルチャおよび UI カルチャを設定する

 

公開日: 2016年10月

ASP.NET Web ページでは、CultureUICulture プロパティの 2 つのカルチャ値を設定できます。 日付、数値、および通貨の書式設定など、カルチャに依存する関数の結果は、Culture 値によって決まります。 ページに読み込まれるリソースは、UICulture 値によって決まります。

注意

CultureUICulture プロパティは、言語 (たとえば、英語の場合は en、スペイン語の場合は es、ドイツ語の場合は de) とカルチャ (米国の場合は US、英国の場合は GBメキシコの場合は MX、ドイツの場合は DE) を識別するインターネット標準文字列を使用して設定します。 例は、英語/米国の en-US、英語/英国の en-GBスペイン語/メキシコの es-MX です。 詳細については、「CultureInfo」を参照してください。

2 つのカルチャの設定は同じにする必要はありません。 アプリケーションによっては、それらを個別に設定することが必要な場合もあります。 たとえば Web オークションのサイトです。UICulture プロパティは Web ブラウザーごとに変わる可能性があるのに対し、Culture は同じになります。 このため、価格は常に同じ通貨と書式設定で表示されます。

Culture 値には、en-US や en-GB など、特定のカルチャのみを設定できます。 これによって、en-US および en-GB で異なる通貨記号が使用され、en に使用する正しい通貨記号を識別する必要がなくなります。

UI カルチャおよびカルチャは、ユーザーが各自のブラウザーで設定します。 たとえば、Microsoft Internet Explorer の場合、[ツール] メニューの [全般] タブで [インターネット オプション] をクリックして [言語] をクリックし、言語の優先順位を設定します。 Web.config ファイルのglobalization 要素の enableClientBasedCulture の属性が true に設定されている場合、ブラウザーが送信する値が使用され、ASP.NET によって Web ページのカルチャと UI カルチャが自動的に設定されます。

ページの UI カルチャの決定に、ブラウザー設定のみを使用することはお勧めできません。 これは、ユーザーがそのユーザー用に設定されていないブラウザー (たとえば、インターネット カフェ) を使用することがよくあるためです。 ユーザーがページの言語または言語とカルチャ (CultureInfo 名) を明示的に選択できるメソッドを提供する必要があります。

宣言によって ASP.NET Web ページのカルチャと UI カルチャを設定するには

  • すべてのページの UI カルチャとカルチャを設定するには、次の例のように、Web.config ファイルに globalization セクションを追加し、uicultureculture 属性を設定します。

    <globalization uiCulture="es" culture="es-MX" />
    
  • 個々のページのカルチャと UI カルチャを設定するには、次の例のように、@ Page ディレクティブに CultureUICulture 属性を設定します。

    <%@ Page UICulture="es" Culture="es-MX" %>
    
  • UI カルチャおよびカルチャを現在のブラウザー設定に指定されている最初の言語に ASP.NET で設定するには、UICultureCultureauto に設定します。 またはこの値を、**auto:**culture_info_name に設定します (ここで、culture_info_name はカルチャの名前です)。 カルチャ名の一覧については、CultureInfo に関する説明を参照してください。 これは、@ Page ディレクティブまたは Web.config ファイルのいずれかで設定できます。

プログラムによって ASP.NET Web ページのカルチャおよび UI カルチャを設定するには

  1. ページの InitializeCulture メソッドをオーバーライドします。

  2. オーバーライドしたメソッドで、ページに設定する言語とカルチャを決定します。

    注意

    InitializeCulture メソッドは、コントロールが作成されたり、ページのプロパティが設定されたりする前のページのライフ サイクルのごく初期の段階で呼び出されます。 したがって、コントロールからページに渡される値を読むには、Form コレクションを使用して、要求から直接それを取得する必要があります。

  3. UI カルチャおよびカルチャは、次のいずれかの方法で設定できます。

    • ページの CultureUICulture プロパティを (en-US などの) 言語またはカルチャ文字列に設定します。 これらのプロパティは、ページ内のものでページでのみ使用されます。

    • 現在のスレッドの CurrentUICultureCurrentCulture プロパティを UI カルチャとカルチャにそれぞれ設定します。CurrentUICulture プロパティが、言語とカルチャの情報の文字列を取得します。CurrentCulture プロパティを設定するには、CultureInfo クラスのインスタンスを作成し、その CreateSpecificCulture メソッドを呼び出します。

    ユーザーがドロップダウン リストから使用する言語を選択できる ASP.NET Web ページのコード例を次に示します。 このページは、スレッド処理クラスおよびグローバリゼーション クラスをより簡単に操作できるように、2 つの名前空間をインポートします。

    このトピックと共に使用できる Visual Studio Web サイト プロジェクトとソース コードをダウンロードできます。

    <%@ Page Language="VB" uiculture="auto" %>
    <%@ Import Namespace="System.Threading" %>
    <%@ Import Namespace="System.Globalization" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 
      1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    
    <script runat="server">
        Protected Overrides Sub InitializeCulture()
            If Request.Form("ListBox1") IsNot Nothing Then
                Dim selectedLanguage As String = _
                    Request.Form("ListBox1")
                UICulture = Request.Form("ListBox1")
                Culture = Request.Form("ListBox1")
                Thread.CurrentThread.CurrentCulture = _
                    CultureInfo.CreateSpecificCulture(selectedLanguage)
                Thread.CurrentThread.CurrentUICulture = New _
                    CultureInfo(selectedLanguage)
            End If
            MyBase.InitializeCulture()
        End Sub
    </script>
    <html>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ListBox ID="ListBox1" runat="server">
                <asp:ListItem Value="en-US" 
                    Selected="True">English</asp:ListItem>
                <asp:ListItem Value="es-MX">Español</asp:ListItem>
                <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
            </asp:ListBox><br />
            <asp:Button ID="Button1" runat="server" 
                Text="Set Language" 
                meta:resourcekey="Button1" />
            <br />
            <asp:Label ID="Label1" runat="server" 
                Text="" 
                meta:resourcekey="Label1" />
            </div>
        </form>
    </body>
    </html>
    
    <%@ Page Language="C#" uiculture="auto" %>
    <%@ Import Namespace="System.Threading" %>
    <%@ Import Namespace="System.Globalization" %>
    <script runat="server">
    protected override void InitializeCulture()
    {
        if (Request.Form["ListBox1"] != null)
        {
            String selectedLanguage = Request.Form["ListBox1"];
            UICulture = selectedLanguage ;
            Culture = selectedLanguage ;
    
            Thread.CurrentThread.CurrentCulture = 
                CultureInfo.CreateSpecificCulture(selectedLanguage);
            Thread.CurrentThread.CurrentUICulture = new 
                CultureInfo(selectedLanguage);
        }
        base.InitializeCulture();
    }
    </script>
    <html>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ListBox ID="ListBox1" runat="server">
                <asp:ListItem Value="en-US" 
                    Selected="True">English</asp:ListItem>
                <asp:ListItem Value="es-MX">Español</asp:ListItem>
                <asp:ListItem Value="de-DE">Deutsch</asp:ListItem>
            </asp:ListBox><br />
            <asp:Button ID="Button1" runat="server" 
                Text="Set Language" 
                meta:resourcekey="Button1" />
            <br />
            <asp:Label ID="Label1" runat="server" 
                Text="" 
                meta:resourcekey="Label1" />
            </div>
        </form>
    </body>
    </html>
    

関連項目

ASP.NET Globalization and Localization