Next: , Previous: , Up: List of Programming Languages   [Contents][Index]


15.5.11 Java

RPM

java、java2

ファイル拡張子

java

文字列構文

"abc"

gettextの略記

_("abc")

gettext/ngettext関数

GettextResource.gettextGettextResource.ngettextGettextResource.pgettextGettextResource.npgettext

textdomain


かわりにResourceBundle.getResourceを使用してください

bindtextdomain


かわりにCLASSPATHを使用してください

setlocale

自動

必要条件

GNU gettextの使用またはエミュレート


Java specific message catalog formatを使用してください

抽出プログラム

xgettext -k_

位置の書式

MessageFormat.format "{1,number} {0,number}"

可搬性

完全な可搬性がある

po-modeでのマーキング

文字列をインターナショナライズ可能とマークする前に、文字列結合演算子を使って、MessageFormatアプリケーションで変換が必要な文字列を結合してください。たとえば"file "+filename+" not found"は、MessageFormat.format("file {0} not found", new Object[] { filename })となります。これを行った後のみ、文字列をマークして抽出することが可能になります。

GNU gettextはJava 本来がもつ、ResourceBundleという名前のインターナショナリゼーションのメカニズムを使います。ResourceBundleには、.properties.classという、2つのファイル フォーマットがあります。.propertiesファイルは、POファイルのように翻訳者が直接編集できるテキスト形式ですが、plural formをサポートしません。.classは、.javaのソースコードからコンパイルされた形式で、plural formをサポートします(適切なAPIを通じてのアクセスが提供されています。以下を参照してください)。

POファイルを.propertiesファイルに変換するためには、msgcatプログラムの --properties-outputオプションを使うことができます。逆に.propertiesファイルをPOファイルに変換するには、msgcatプログラムの--properties-inputオプションを使うことができます。POファイルを扱うすべてのツールは、--properties-inputおよび/または--properties-outputオプションにより、.propertiesも同様に取り扱うことができます。

POファイルをResourceBundle classに変換するためには、msgfmtプログラムの、--java(または--java2)オプションを使うことができます。逆にResourceBundleをPOファイルに変換するためには、msgunfmt--javaオプションを使うことができます。

プログラムからResourceBundleにアクセスするために、異なる2つのAPIを使うことができます。これら2つのAPIは、ResourceBundleがGNU gettextにより生成されたものであるか、それともこれ以外の.class.propertiesファイルであるかによらず、すべての種類のResourceBundleを扱えることに注意してください。

  1. java.util.ResourceBundle API

    特徴は、これのgetString関数が、翻訳された文字列を戻すことです。翻訳がない場合には、MissingResourceExceptionが発生することに注意してください。

    これは、標準のAPIに採用されるためには有利な特徴といえます。さらに、このAPIは追加のライブラリーを必要とせず、msgcatによって生成された.propertiesファイルか、msgfmtによって生成された.classファイルだけが必要です。しかし、このAPIはpluralを処理できず、それはpluralを処理するPOファイルからmsgfmtで生成されたリソースの場合も同様です。

  2. gnu.gettext.GettextResource API

    javadoc2 directoryに、Javadoc 1.1 style formatのReference documentation があります。

    このAPIのgettext関数は、翻訳された文字列を戻します。翻訳がない場合には、msgidが変更されずに戻されることに注意してください。

    このAPIの有利な点は、pluralを処理するngettext関数があること、そして特定のcontextにたいする制約をもつ文字列を処理するpgettextnpgettextのある点です。

    このAPIを使うために必要なのは、GNU gettextパッケージの一部であるlibintl.jarだけで、これはLGPLのもとで配布されています。

2番目のAPIを使うための例としては、examplesディレクトリーの、hello-javahello-java-awthello-java-swinghello-java-qtjambiが利用できます。

ではAPIの使い方と、‘getString’の略記をしてみましょう。以下の3つの用法から選択することができましょう:

3つの用法のどれを選ぶかは、あなたのプロジェクトがJava 1.5より前のバージョンにたいする互換性を必要とするかに依存します。もしその必要がある場合には、プロジェクトのすべてのクラスに1文字のクラスを追加するより、すべてのクラスに2行追加するほうがよいでしょう。