方法: ASP.NET Web ページのグローバリゼーション用のカルチャおよび UI カルチャを設定する
公開日: 2016年10月
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" %>
UI カルチャおよびカルチャを現在のブラウザー設定に指定されている最初の言語に ASP.NET で設定するには、UICulture と Culture を auto に設定します。 またはこの値を、**auto:**culture_info_name に設定します (ここで、culture_info_name はカルチャの名前です)。 カルチャ名の一覧については、CultureInfo に関する説明を参照してください。 これは、@ Page ディレクティブまたは Web.config ファイルのいずれかで設定できます。
プログラムによって ASP.NET Web ページのカルチャおよび UI カルチャを設定するには
ページの InitializeCulture メソッドをオーバーライドします。
オーバーライドしたメソッドで、ページに設定する言語とカルチャを決定します。
注意
InitializeCulture メソッドは、コントロールが作成されたり、ページのプロパティが設定されたりする前のページのライフ サイクルのごく初期の段階で呼び出されます。 したがって、コントロールからページに渡される値を読むには、Form コレクションを使用して、要求から直接それを取得する必要があります。
UI カルチャおよびカルチャは、次のいずれかの方法で設定できます。
ページの Culture と UICulture プロパティを (en-US などの) 言語またはカルチャ文字列に設定します。 これらのプロパティは、ページ内のものでページでのみ使用されます。
現在のスレッドの CurrentUICulture と CurrentCulture プロパティを 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>