Javaに関する様々な情報をご紹介します。

5Standard Taglibs:I18Nタグライブラリ

Javaに関する様々な情報をご紹介します。

Standard Taglibs:I18Nタグライブラリ

ここでは、Standard Taglibsで定義されている、I18Nタグライブラリについて解説します。I18Nタグライブラリでは、ロケールの設定、日付、時刻、数値などの書式設定を行うタグが定義されています。

実行環境
  • ・WindowsXP Home Edition
  • ・J2SDK 1.4.2_04
  • ・Tomcat 5.0.18
  • ・Standard Taglib 1.1.0

I18Nタグライブラリの一覧

I18Nタグライブラリで定義されているタグを以下に記載します。

タグ 内容
<fmt:setLocale> ロケールを設定する。
<fmt:setBundle> メッセージキーとそれに対応する定型メッセージを設定したリソースバンドルオブジェクトを設定する。<fmt:message>タグからリソースバンドルオブジェクトを指定して使用することが可能。
<fmt:bundle> メッセージキーとそれに対応する定型メッセージを設定したリソースバンドルを設定する。<fmt:bundle>タグ内で、<fmt:message>からリソースバンドルを使用する。
<fmt:message> リソースバンドルに設定された定型メッセージを出力する。
<fmt:param> <fmt:message>タグ内で、リソースバンドル内で設定された変数に対応する値を設定する。
<fmt:formatDate> 日付・時刻の書式を設定、出力する。
<fmt:parseDate> 文字列を解析し、Dateオブジェクトを出力する。
<fmt:formatNumber> 数値・通貨の書式を設定、出力する。
<fmt:parseNumber> 文字列を解析し、Numberオブジェクトを出力する。
<fmt:requestEncoding> リクエスト情報のエンコード方式を設定する。
<fmt:setTimeZone> TimeZoneオブジェクトを生成する。
<fmt:timeZone> <fmt:timeZone>タグ内で、<fmt:formatDate>タグ、<fmt:parseDate>タグで使用するTimeZoneの値を規定する。

I18Nタグライブラリの使用例

<fmt:setLocale>

構文1

<fmt:setLocale value=”ロケール”
   [variant=”バリアント”]
   [scope=”{page|request|session|application}”]/>

属性
属性 内容 必須
value 出力処理に適用されるロケールを指定する。ロケールは言語を表す2文字(小文字)の英字と、国を表す2文字(大文字)の英字を-(ハイフン)か、_(アンダーバー)でつなげた値で表現される。
variant ベンダーやブラウザに依存する表現形式を指定する。詳細はjava.util.LocaleのJavaAPIを参照。 ×
scope ロケール設定のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: localeパラメータに値が設定されている場合に、設定されている値をロケールとして設定します。

<c:if test="${!empty param.locale}">
    <fmt:setLocale value="${param.locale}" scope="page"/>
</c:if>

<fmt:setBundle>

構文1

<fmt:setBundle basename=”基底名”
  [var=”変数名”]
  [scope=”{page|request|session|application}”]/>

属性
属性 内容 必須
basename リソースバンドルオブジェクトの基底名を完全修飾名で指定する。。基底名がresourcesで、ロケールがjaの場合、リソースバンドルオブジェクトはresources_jaになる。
var リソースバンドルオブジェクトを参照する変数名。 ×
scope リソースバンドルオブジェクトを参照する変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: <fmt:setBundle>タグで設定したリソースバンドルオブジェクトを、<fmt:message>タグで参照しています。

<fmt:setLocale value="it_IT"/>
<fmt:setBundle
        basename="org.apache.taglibs.standard.examples.i18n.Resources"
        var="itBundle" scope="page"/>
<fmt:message key="greetingMorning" bundle="${itBundle}"/>

<fmt:bundle>

構文1

<fmt:bundle basename=”基底名” [prefix=”プレフィックス”]>
   リソースバンドルを参照する処理
</fmt:bundle>

属性
属性 内容 必須
basename リソースバンドルの基底名を完全修飾名で指定する。基底名がresourcesで、ロケールがjaの場合、リソースバンドルはresources_jaになる。
prefix <fmt:message>タグで指定されるKeyのPrefixを指定する。Prefixをshopping、Keyをbuyとした場合、リソースバンドルのshopping.buyの値が表示されます。 ×

サンプルコード: <fmt:bundle>タグで設定したリソースバンドルを、<fmt:message>タグで参照しています。

<fmt:setLocale value="de"/>
<fmt:bundle
        basename="org.apache.taglibs.standard.examples.i18n.Resources"
        prefix="com.acme.labels.">
    <fmt:message key="cancel"/>
</fmt:bundle>

<fmt:message>

構文1

<fmt:message key=”メッセージキー”
  [bundle=”リソースバンドル”]
  [var=”変数名”]
  [scope=”{page|request|session|application}”]/>

構文2

<fmt:message key=”メッセージキー”
    [bundle=”リソースバンドル”]
    [var=”変数名”]
    [scope=”{page|request|session|application}”]>
   <fmt:param>リソースバンドル内の変数を指定
</fmt:message>

構文3

<fmt:message [bundle=”リソースバンドル”]
     [var=”変数名”]
     [scope=”{page|request|session|application}”]>
   メッセージキー
   <fmt:param>リソースバンドル内の変数を指定
</fmt:message>

属性
属性 内容 必須
key リソースバンドルに設定されたメッセージに対応するキーを指定する。 ×
bundle key属性の値が定義されたリソースバンドルを指定する。 ×
var 対応するメッセージを代入する変数。 ×
scope メッセージが代入された変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: <fmt:setBundle>タグで設定したリソースバンドルオブジェクトを、<fmt:message>タグで参照しています。

<fmt:setLocale value="it_IT"/>
<fmt:setBundle
        basename="org.apache.taglibs.standard.examples.i18n.Resources"
        var="itBundle" scope="page"/>
<fmt:message key="greetingMorning" bundle="${itBundle}"/>

<fmt:param>

構文1

<fmt:param value=”リソースバンドルで使用される値”/>

構文2

<fmt:param>
   リソースバンドルで使用される値
</fmt:param>

属性
属性 内容 必須
value リソースバンドルに指定されている変数に置き換わる値を指定する。 ×

サンプルコード: <fmt:message>タグで指定されたリソースバンドル内の変数の値を<fmt:param>タグの値に置き換えて表示しています。

<fmt:message key="currentTime" bundle="${deBundle}">
    <fmt:param value="${currentDate}"/>
</fmt:message>

<fmt:formatDate>

構文1

<fmt:formatDate value="フォーマットされる日付・時刻"
   [type="{time|date|both}"]
   [dateStyle="{default|short|medium|long|full}"]
   [timeStyle="{default|short|medium|long|full}"]
   [pattern="カスタムパターン"]
   [timeZone="タイムゾーンID"]
   [var="変数名"]
   [scope="{page|request|session|application}"]/>

属性
属性 内容 必須
value フォーマットされる日付・時刻を表す文字列を指定する。
type 日付・時刻のどちらをフォーマットするか指定する。bothは両方、dateは日付、timeは時刻をフォーマットする。デフォルトではdateが設定される。 ×
dateStyle java.text.DateFormatクラスで定義されている定型フォーマット(DEFAULT, SHORT, MEDIUM, LONG, FULL)を指定する。デフォルトではDEFAULTが設定される。type属性にbothかdateが指定されている場合に有効になる。 ×
timeStyle java.text.DateFormatクラスで定義されている定型フォーマット(DEFAULT, SHORT, MEDIUM, LONG, FULL)を指定する。デフォルトではDEFAULTが設定される。type属性にbothかtimeが指定されている場合に有効になる。 ×
pattern java.text.SimpleDateFormatクラスで定義されているパターン文字に基づき、フォーマットパターンを指定する。 ×
timeZone 日付・時刻のタイムゾーンを指定する。タイムゾーンの指定にはタイムゾーンIDを用いる。日本標準時のタイムゾーンIDは"Asia/Tokyo"。タイムゾーンIDの詳細はJavaの道:日付・時刻(TimeZoneクラス)を参照。 ×
var フォーマットされた日付・時刻を代入する変数。 ×
scope 日付・時刻が代入された変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: <fmt:formatDate>タグのvalue属性で指定したnow変数(Dateオブジェクトを代入)を設定に基づきフォーマットし、表示しています。

<fmt:timeZone value="GMT">
    <fmt:formatDate value="${now}" type="both"
                    dateStyle="full" timeStyle="full"/>
</fmt:timeZone>

<fmt:parseDate>

構文1

<fmt:parseDate value=”解析する文字列”
   [type=”{time|date|both}”]
   [dateStyle=”{default|short|medium|long|full}”]
   [timeStyle=”{default|short|medium|long|full}”]
   [pattern=”カスタムパターン”]
   [timeZone=”タイムゾーンID”]
   [parseLocale=”ロケール”]
   [var=”変数名”]
   [scope=”{page|request|session|application}”]/>

構文2

<fmt:parseDate [type=”{time|date|both}”]
     [datestyle=”{default|short|medium|long|full}”]
     [timestyle=”{default|short|medium|long|full}”]
     [pattern=”カスタムパターン”]
     [timezone=”タイムゾーンID”]
     [parselocale=”ロケール”]
     [var=”変数名”]
     [scope=”{page|request|session|application}”]>
   解析される文字列
</fmt:parseDate>

属性
属性 内容 必須
value 解析する文字列を指定する。 ×
type 日付・時刻のどちらを解析するかを指定する。bothは両方、dateは日付、timeは時刻を解析することを表す。デフォルトではdateが設定される。 ×
dateStyle java.text.DateFormatクラスで定義されている定型フォーマット(DEFAULT, SHORT, MEDIUM, LONG, FULL)を指定する。デフォルトではDEFAULTが設定される。type属性にbothかdateが指定されている場合に有効になる。 ×
timeStyle java.text.DateFormatクラスで定義されている定型フォーマット(DEFAULT, SHORT, MEDIUM, LONG, FULL)を指定する。デフォルトではDEFAULTが設定される。type属性にbothかtimeが指定されている場合に有効になる。 ×
pattern java.text.SimpleDateFormatクラスで定義されているパターン文字に基づき、フォーマットパターンを指定する。 ×
timeZone 日付・時刻のタイムゾーンを指定する。タイムゾーンの指定にはタイムゾーンIDを用いる。日本標準時のタイムゾーンIDは"Asia/Tokyo"。タイムゾーンIDの詳細はJavaの道:日付・時刻(TimeZoneクラス)を参照。 ×
parseLocale 解析する際のロケールを指定する。Locale定数の一覧はAPIドキュメントを参照。 ×
var 解析されたDateオブジェクトを代入する変数。 ×
scope Dateオブジェクトが代入された変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: <fmt:formatDate>タグで生成した日付・時刻の文字列を、<fmt:parseDate>タグで解析、フォーマットし、<c:out>タグで表示しています。

<fmt:formatDate value="${now}" type="both"
        timeStyle="short" var="formatted"/>
<fmt:parseDate value="${formatted}" type="both"
        timeStyle="short" timeZone="GMT" var="parsed"/>
<c:out value="${parsed}"/>

<formatNumber>

構文1

<fmt:formatNumber value=”フォーマットされる数値”
   [type=”{number|currency|percent}”]
   [pattern=”カスタムパターン”]
   [currencyCode=”通貨コード”]
   [currencySymbol=”通貨記号”]
   [groupingUsed=”{true|false}”]
   [maxIntegerDigits=”整数部分の最大桁数”]
   [minIntegerDigits=”整数部分の最小桁数”]
   [maxFractionDigits=”少数部分の最大桁数”]
   [minFractionDigits=”少数部分の最小桁数”]
   [var=”変数名”]
   [scope=”{page|request|session|application}”]/>

構文2

<fmt:formatNumber [type=”{number|currency|percent}”]
     [pattern=”カスタムパターン”]
     [currencyCode=”通貨コード”]
     [currencySymbol=”通貨記号”]
     [groupingUsed=”{true|false}”]
     [maxIntegerDigits=”整数部分の最大桁数”]
     [minIntegerDigits=”整数部分の最小桁数”]
     [maxFractionDigits=”少数部分の最大桁数”]
     [minFractionDigits=”少数部分の最小桁数”]
     [var=”変数名”]
     [scope=”{page|request|session|application}”]>
   フォーマットされる数値
</fmt:formatNumber>

属性
属性 内容 必須
value フォーマットされる数値を指定する。 ×
type 数値をnumber(数値)、currency(通貨)、percent(パーセント)のいずれの形式でフォーマットするかを指定する。デフォルトではnumberが設定される。 ×
pattern java.text.DecimalFormatクラスで定義されているパターン文字に基づき、フォーマットパターンを指定する。DecimalFormatクラスの詳細はJavaの道:数データ(フォーマット処理)を参照。 ×
currencyCode ISO4217で規定されている通貨コード(日本円はJPY、米ドルはUSD)を指定する。type属性がcurrencyのときのみ有効になる。通貨コードの一覧はBSIのサイトからダウンロードできる。 ×
currencySymbol 通貨記号を指定する。type属性がcurrencyのときのみ有効になる。 ×
grouping
Used
数値をフォーマットする際、,(カンマ)などにより数値をグルーピングするかを指定する。デフォルトでは、trueが設定されている。 x
maxIntegerDigits フォーマットされる数値の整数部分の最大桁数を指定する。数値が最大桁数を超えた場合、超えた部分は出力されない。 ×
minIntegerDigits フォーマットされる数値の整数部分の最小桁数を指定する。 ×
maxFractionDigits フォーマットされる数値の少数部分の最大桁数を指定する。 ×
minFractionDigits フォーマットされる数値の少数部分の最小桁数を指定する。 ×
var フォーマットされた数値を代入する変数。 ×
scope 数値が代入された変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: <fmt:formatNumber>タグのvalue属性で指定した数値を、設定に基づきフォーマットし、表示しています。

<fmt:formatNumber value="12345.67" type="currency"
        groupingUsed="false" maxIntegerDigits="4"
        maxFractionDigits="0" /> 

<fmt:parseNumber>

構文1

<fmt:parseNumber value=”解析される数値”
   [type=”{number|currency|percent}”]
   [pattern=”カスタムパターン”]
   [parseLocale=”ロケール”]
   [integerOnly=”{true|false}”]
   [var=”変数名”]
   [scope=”{page|request|session|application}”]/>

構文2

<fmt:parseNumber [type=”{number|currency|percent}”]
    [pattern=”カスタムパターン”]
    [parseLocale=”ロケール”]
    [integerOnly=”{true|false}”]
    [var=”変数名”]
    [scope=”{page|request|session|application}”]>
   解析される数値
</fmt:parseNumber>

属性
属性 内容 必須
value 解析される数値を指定する。 ×
type 数値をnumber(数値)、currency(通貨)、percent(パーセント)のいずれの形式で解析するかを指定する。デフォルトではnumberが設定される。 ×
pattern java.text.DecimalFormatクラスで定義されているパターン文字に基づき、フォーマットパターンを指定する。DecimalFormatクラスの詳細はJavaの道:数データ(フォーマット処理)を参照。 ×
parseLocale 解析する際のロケールを指定する。Locale定数の一覧はAPIドキュメントを参照。 ×
integerOnly 値がtrueの場合は数値の整数部分のみを解析し、出力する。デフォルトではfalseが設定される。 ×
var 解析されたNumberオブジェクトを代入する変数。 ×
scope Numberオブジェクトが代入された変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

サンプルコード: <fmt:formatNumber>タグでフォーマットされた数値をcur変数に代入し、<fmt:parseNumber>タグでcur変数の値を解析しています。

<fmt:formatNumber value="12345.67" type="currency"
        var="cur" />
<fmt:parseNumber value="${cur}" type="currency"
        integerOnly="true" />

<fmt:requestEncoding>

構文1

<fmt:requestEncoding [value=”エンコード方式”]/>

属性
属性 内容 必須
value リクエストデータをエンコードする際のエンコード方式を指定する。サポートされているエンコード方式の詳細はJavaドキュメントを参照。 ×

サンプルコード: <fmt:requestEncoding>タグで指定されたエンコード方式で、リクエストデータ(${param.a_umlaut}など)をエンコードし、表示しています。

<fmt:requestEncoding value="UTF-8"/>
<ul>
    <li>a umlaut: <c:out value="${param.a_umlaut}"/>
    <li>o umlaut: <c:out value="${param.o_umlaut}"/>
    <li>u umlaut: <c:out value="${param.u_umlaut}"/>
</ul>

<fmt:setTimeZone

構文1

<fmt:setTimeZone value=”タイムゾーンID”
   [var=”varName”]
   [scope=”{page|request|session|application}”]/>

属性
属性 内容 必須
value タイムゾーンIDを指定する。日本標準時のタイムゾーンIDは"Asia/Tokyo"。タイムゾーンIDの詳細はJavaの道:日付・時刻(TimeZoneクラス)を参照。
var TimeZoneオブジェクトを代入する変数。 ×
scope TimeZoneオブジェクトが代入された変数のスコープを設定する。スコープはpage、request、session、applicationのいずれかを設定できる。デフォルトでは、pageが設定されている。 ×

<fmt:timeZone>

構文1

<fmt:timeZone value=”タイムゾーンID>
   タイムゾーンが適用される処理
</fmt:timeZone>

属性
属性 内容 必須
value タイムゾーンIDを指定する。日本標準時のタイムゾーンIDは"Asia/Tokyo"。タイムゾーンIDの詳細はJavaの道:日付・時刻(TimeZoneクラス)を参照。

サンプルコード: <fmt:timeZone>タグでタイムゾーンをGMTに設定し、<fmt:formatDate>タグを実行しています。

<fmt:timeZone value="GMT">
    <fmt:formatDate value="${now}" type="both"
            dateStyle="full" timeStyle="full"/>
</fmt:timeZone>

5Standard Taglibs:I18Nタグライブラリ