方法 : ASP.NET Web ページのグローバリゼーション用のカルチャおよび UI カルチャを設定する
更新 : 2007 年 11 月
ASP.NET Web では、Culture プロパティおよび UICulture プロパティの 2 つのカルチャ値を設定できます。Culture 値は、日付、数字、通貨書式など、カルチャに依存する機能の結果を決定します。UICulture 値は、どのリソースをページに読み込むかを決定します。
メモ : |
---|
Culture プロパティおよび UICulture プロパティは、言語 (たとえば、英語の 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 セクションを追加して、uiculture 属性および culture 属性を設定します。
<globalization uiCulture="es" culture="es-MX" />
個々のページの UI カルチャおよびカルチャを設定するには、次の例に示すように、@ Page ディレクティブの Culture 属性および UICulture 属性を設定します。
<%@ Page UICulture="es" Culture="es-MX" %>
ASP.NET で、UI カルチャおよびカルチャを現在のブラウザ設定に指定されている最初の言語に設定するには、UICulture および Culture を auto に設定します。別の方法として、この値を auto:culture_info_name に設定できます。ここで culture_info_name はカルチャ名を表します。カルチャ名の一覧については、CultureInfo のトピックを参照してください。これは、@ Page ディレクティブまたは Web.config ファイルいずれかに設定できます。
プログラムによって ASP.NET Web ページのカルチャおよび UI カルチャを設定するには
ページの InitializeCulture メソッドをオーバーライドします。
オーバーライドしたメソッドで、ページに設定する言語とカルチャを決定します。
メモ : InitializeCulture メソッドは、コントロールを作成したりページのプロパティを設定したりする前、ページの有効期間の最も初期に呼び出されます。このため、コントロールからページに渡される値を読み取るには、Form コレクションを使用して要求から直接それを取得する必要があります。
次に示す方法の 1 つで、UI カルチャおよびカルチャを設定します。
ページの Culture プロパティと UICulture プロパティを言語の文字列とカルチャの文字列に設定します (たとえば、en-US)。これらのプロパティはページの内部にあり、ページ内でのみ使用できます。
現在のスレッドの CurrentUICulture プロパティおよび CurrentCulture プロパティをそれぞれ UI カルチャとカルチャに設定します。CurrentUICulture プロパティは、言語とカルチャの情報の文字列を取得します。CurrentCulture プロパティを設定するには、CultureInfo クラスのインスタンスを作成し、その CreateSpecificCulture メソッドを呼び出します。
ユーザーがドロップダウン リストから使用する言語を選択できる ASP.NET Web ページのコード例を次に示します。このページは、スレッド処理クラスおよびグローバリゼーション クラスをより簡単に操作できるように、2 つの名前空間をインポートします。
<%@ 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>