検索
連載

国際化プログラミングの常識プログラマーの常識をJavaで身につける(5)(2/3 ページ)

本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は、「国際化プログラミング」について。国際化なんて自分には関係ないと思っていませんか? 実は身近な存在で、プログラムの基本となる知識も含んでいます。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

Javaプログラミングの国際化について

 それでは、Javaの国際化に関する情報を見ていきましょう。Javaにとっての一次情報源であるサン・マイクロシステムズ提供のドキュメントに、Javaの国際化に関する有益な情報が記載されていますので、こちらを見ていきます。

編集部注一次情報源の重要性については、連載第1回 の「プログラマーがAPIに向き合ううえでの常識」をご参照ください

 サン・マイクロシステムズからさまざまな情報が提供されていますが、ドキュメントが日本語訳されているものとしては以下の2点がよくまとまっています。

Javaの国際化の概要

 Javaの国際化の概要をより深く知るために、「JDK 5.0ドキュメント:国際化の概要」をもう少し詳しく見ていきましょう。。このドキュメントでは、Javaの国際化について、以下のような分類でまとめられています。各分類の詳細については、要約してあります。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

国際化は「ほどほど」に!!

 この国際化対応の記載には、「Java実行環境に実装されているためプログラマーが意識しなくても自然に実現される国際化対応」と「Javaプログラマーが意識的にJava APIを活用などすることによって実現される国際化対応」の2種類が含まれている点に注意が必要です。このため、プログラマーがここに記載されているすべてを理解しておく必要はありません(例えば、Java実行環境のUnicode対応に関する実装については、プログラマーの多くは知る必要がないことでしょう)。

 さらに、Javaプログラマーが利用する国際化対応機能についても、すべてを使いこなす必要はありません。むしろ、国際化対応機能をむやみに使うと、訳の分からないソースコードが出来上がってしまう懸念すらあります。目的をしっかり持ち、必要となる国際化プログラミングを選択しながら、ほどほどに適切に利用する必要があるのです。

文字列をソースコードから外部ファイルへ抽出[java.util.ResourceBundle]

 また、国際化プログラミング技術の中には、国際化以外の目的でも有益な技術が含まれています。例えば、ResourceBundleクラスを使うと、画面表示内容メッセージなどの文字列をソースコードから外部ファイル(*.properties)へと追い出すことができます。外部ファイル化しておくと、そのプログラムに精通していない第三者でも、メッセージなどの文字列を変更(保守)しやすくなるというメリットがあります。

プロパティファイルを使った国際化

 それではいよいよ、国際化プログラミングに関するJava APIのうち、いくつかを見ていきましょう。

 最もよく利用される国際化関連Java APIの1つがjava.util.ResourceBundleクラスです。このクラスを使うと、ロケールに対応した言語の*.propertiesファイルが自動的に読み込まれます

国際化したpropertiesファイルを作る

 最初に、プロパティファイル(*.properties)を作成します。ResourceBundleが利用するプロパティファイルはnative2asciiコマンドを使って作成します。このコマンドについては「native2ascii - ネイティブ - ASCII コンバータ」 を参照してください。

 ただし、native2asciiコマンドは場合によって面倒なことが多いので、プロパティファイルの作成・編集には、Eclipseプラグインを利用する場合が多いです。@ITの記事「CoolなEclipseプラグイン(1):Javaのプロパティファイルを編集できるプラグイン」に、主なものが紹介されています。

 今回は、Excelを用いてプロパティファイルの記述が可能なblancoResourceBundleプラグイン(バージョン 1.0.0)を使います。インストールや使い方については、blancoResourceBundleプラグインのサイトを参照してください。

 また今回は、「ことわざバンドル」というリソースバンドルについて英語版と日本語版の2つを準備します。以下のように、enシートとjaシートの2つを作成します(シート名とロケールとをそろえておいてください)。

図7 リソースバンドル定義書記入(英語)
図7 リソースバンドル定義書記入(英語)
図8 リソースバンドル定義書記入(日本語)
図8 リソースバンドル定義書記入(日本語)

 インストールしたblancoResourceBundleプラグインの[ソースコード生成]ボタンを押します。

図9 blancoResourceBundleプラグインによるプロパティファイルの自動生成
図9 blancoResourceBundleプラグインによるプロパティファイルの自動生成

 すると、以下の3つのプロパティファイルが作成されます。

  • kotowaza.properties(基底名.properties
  • kotowaza_en.properties(基底名_en.properties
  • kotowaza_jp.properties(基底名_jp.properties

 これらのうち、_enのものが英語版、_jpのものが日本語版となります。。ちなみに、対応するプロパティファイルがない場合(例えば、このケースにおいてフランス語としてプログラムが起動された場合)には、kotowaza.properties(基底名.properties)が利用されるようになっています。

 これらのファイルはJavaのクラスパスの範囲に存在する必要があります。ここでは便宜上、Eclipseがクラスパスとして取り扱うsrcフォルダへプロパティファイルをコピーして利用します。

図10 コピー元のプロパティファイル
図10 コピー元のプロパティファイル
図11 コピー後のsrcフォルダ
図11 コピー後のsrcフォルダ

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る