Oracle® Fusion Middleware Oracle WebLogic Server アプリケーション ロギングのロギング サービス ユーザーズ ガイド 11g リリース 1 (10.3.1) B55513-01 |
|
戻る |
次へ |
以下の節では、TextFormatter
クラスのリファレンス情報を提供します。
TextFormatter
クラスは、weblogic.i18ngen
によってシンプル メッセージ カタログから生成されます。このクラスは、実行時にメッセージ テキストのローカライズ版の生成に使用されるメソッドを提供します。
Hello_World
アプリケーションとそのシンプル メッセージ カタログ、およびそのカタログに対して生成された TextFormatter
クラスの例を以下に示します。
コード リスト C-1 シンプル メッセージ カタログの例
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE message_catalog PUBLIC "weblogic-message-catalog-dtd" "http://www.bea.com/servers/wls90/dtd/msgcat.dtd"> <message_catalog l10n_package="examples.i18n.simple" subsystem="I18N" version="1.0" > <message messageid="HELLO_WORLD" datelastchanged="967575717875" method="helloWorld()" > <messagebody> Hello World! </messagebody> </message> <!-- --> <message messageid="HELLO_AGAIN" datelastchanged="967575717804" method="helloAgain()" > <messagebody> Hello again </messagebody> </message> <!-- --> <message messageid="NTH_HELLO" datelastchanged="967575770971" method="nthHello(int count)" > <messagebody> This is hello number {0,number}. </messagebody> </message> <!-- --> <message messageid="VERSION" datelastchanged="967578656214" method="version(String version)" > <messagebody> Catalog version: {0} </messagebody> </message> <!-- --> <message messageid="I18N_PACKAGE" datelastchanged="967578691394" method="i18nPackage(String pkg)" > <messagebody> I18n Package: {0} </messagebody> </message> <!-- --> <message messageid="L10N_PACKAGE" datelastchanged="967578720156" method="l10nPackage(String pkg)" > <messagebody> L10n Package: {0} </messagebody> </message> <!-- --> <message messageid="SUBSYSTEM" datelastchanged="967578755587" method="subSystem(String sub)" > <messagebody> Catalog subsystem: {0} </messagebody> </message> </message_catalog>
次に、HelloWorld カタログを使用したアプリケーションの例を示します。この例では、シンプル メッセージ カタログを使用したアプリケーションをインターナショナライズするさまざまな方法を示します。
コード リスト C-2 HelloWorld カタログを使用したアプリケーションの例
package examples.i18n.simple; import java.util.Locale; import java.text.MessageFormat; import weblogic.i18n.Localizer; import weblogic.i18ntools.L10nLookup; /** * この例では、シンプル メッセージ カタログを使用したアプリケーションを * インターナショナライズするさまざまな方法を示す。 * <p> * 使い方 : java examples.i18n.simple.HelloWorld [lang [country]] * <p> * lang は「en」などの 2 文字の ISO 言語コード * country は「US」などの 2 文字の ISO 国コード * <p> * この例でサポートされている言語を使用する場合、適切な OS * ローカライゼーション ソフトウェアと文字エンコーディングがあること * を前提とする。 * <p> * この例では、英語 (デフォルト) とフランス語のカタログが示されている * カタログ ソースは、以下のファイルにあり、カタログ編集ユーティリティ、 * weblogic.i18ntools.gui.MessageEditor を使用して構築されたものである * <p> * <pre> * English(base language) ../msgcat/Helloworld.xml * French ../msgcat/fr/FR/HelloWorld.xml * </pre> * <p> * このサンプルをビルドするには、examples/i18n/simple ディレクトリから bld.sh (UNIX) * または bld.cmd (NT) を実行する このサンプルを実行する場合、CLIENT_CLASSES * をセットアップし、これをクラスパスに配置する必要がある */ public final class HelloWorld { public static void main(String[] argv) { /* * ローカライズされたテキストを表示する最も簡単な方法は、 * 生成された HelloWorld カタログのフォーマッタ クラスをインスタンス化することである * このクラスには、カタログで定義された各メッセージをローカライズしたテキストを * 返すコンビニエンス メソッドが入っている。クラス名は、カタログ名に * 「TextFormatter」を付加した名前になる * * 通常、現行ロケールでのフォーマットには、デフォルト * コンストラクタを使用する。この例では、引数に基づいたロケールを使用して * TextFormatter を作成する */ Locale lcl; if (argv.length == 0) { // デフォルトは JVM のデフォルト ロケール lcl = Locale.getDefault(); } else { String lang = null; String country = null; //言語コードを取得する lang = argv[0]; if (argv.length >= 2) { // 国コードを取得する country = argv[1]; } lcl = new Locale(lang,country); } /* * 適切なロケールによるフォーマッタを取得する */ HelloWorldTextFormatter fmt = new HelloWorldTextFormatter(lcl); fmt.setExtendedFormat(true); /* * 現行ロケールでテキストを出力する */ System.out.println(fmt.helloWorld()); /* * また、手動でテキストにアクセスし、フォーマットすることもできるその場合、 * そのカタログの Localizer クラスを取得する必要があるLocalizer * クラスは、カタログの l10n_package 属性、カタログ名、および文字列「TextLocalizer」 * で構成される */ Localizer l10n = L10nLookup.getLocalizer (lcl,"examples.i18n.simple.HelloWorldTextLocalizer"); System.out.println(l10n.get("HELLO_AGAIN")); /* * メッセージに引数が入る場合、引数はメッセージに定義された * メソッドに渡すことができる */ System.out.println(fmt.nthHello(3)); /* * マニュアル メソッドを使用する場合、MessageFormat クラスを使用して、引数を手動で * テキストに適用する必要がある */ String text = l10n.get("NTH_HELLO"); Object[] args = {new Integer(4)}; System.out.println(MessageFormat.format(text,args)); /* * また、Localizer クラスは、カタログ情報にアクセスするメソッドも * 提供する */ System.out.println(fmt.version(l10n.getVersion())); System.out.println(fmt.l10nPackage(l10n.getL10nPackage())); System.out.println(fmt.i18nPackage(l10n.getI18nPackage())); System.out.println(fmt.subSystem(l10n.getSubSystem())); } }
次に、HelloWorld カタログに対して生成された TextFormatter
の例を示します。
コード リスト C-3 HelloWorld カタログに対して生成された TextFormatter クラスの例
package examples.i18n.simple;import java.text.MessageFormat; import java.text.DateFormat; import java.util.Date; import java.util.Locale; import weblogic.i18n.Localizer; import weblogic.i18ntools.L10nLookup; public class HelloWorldTextFormatter { private Localizer l10n; private boolean format=false; // コンストラクタ public HelloWorldTextFormatter() { l10n = L10nLookup.getLocalizer(Locale.getDefault(), "examples.i18n.simple.HelloWorldTextLocalizer"); } public HelloWorldTextFormatter(Locale l) { l10n = L10nLookup.getLocalizer(l,"examples.i18n.simple.HelloWorldTextLocalizer"); } public static HelloWorldTextFormatter getInstance() { return new HelloWorldTextFormatter(); } public static HelloWorldTextFormatter getInstance(Locale l) { return new HelloWorldTextFormatter(l); } public void setExtendedFormat(boolean fmt) { format = fmt; } public boolean getExtendedFormat() { return format; /** * Hello World! */ public String helloWorld() { String fmt = ""; String id = "HELLO_WORLD" ; String subsystem = "I18N" ; Object [] args = { }; String output = MessageFormat.format(l10n.get(id) , args); if (getExtendedFormat()) { DateFormat dformat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG); fmt = "<"+dformat.format(new Date())+"><"+subsystem+"><"+id+"> "; } return fmt+output; } /** * Hello again */ public String helloAgain() { String fmt = ""; String id = "HELLO_AGAIN" ; String subsystem = "I18N" ; Object [] args = { }; String output = MessageFormat.format(l10n.get(id) , args); if (getExtendedFormat()) { DateFormat dformat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG); fmt = "<"+dformat.format(new Date())+"><"+subsystem+"><"+id+">"; } return fmt+output; } /** * hello 番号 {0,number} */ public String nthHello(int arg0) { String fmt = ""; String id = "NTH_HELLO" ; String subsystem = "I18N" ; Object [] args = { new Integer(arg0) }; String output = MessageFormat.format(l10n.get(id) , args); if (getExtendedFormat()) { DateFormat dformat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG); fmt = "<"+dformat.format(new Date())+"><"+subsystem+"><"+id+">"; } return fmt+output; } /** * カタログ バージョン: {0} */ public String version(String arg0) { String fmt = ""; String id = "VERSION" ; String subsystem = "I18N" ; Object [] args = { arg0 }; String output = MessageFormat.format(l10n.get(id) , args); if (getExtendedFormat()) { DateFormat dformat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG); fmt = "<"+dformat.format(new Date())+"><"+subsystem+"><"+id+">"; } return fmt+output; } /** * I18n パッケージ: {0} */ public String i18nPackage(String arg0) { String fmt = ""; String id = "I18N_PACKAGE" ; String subsystem = "I18N" ; Object [] args = { arg0 }; String output = MessageFormat.format(l10n.get(id) , args); if (getExtendedFormat()) { DateFormat dformat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG); fmt = "<"+dformat.format(new Date())+"><"+subsystem+"><"+id+">"; } return fmt+output; } /** * L10n パッケージ: {0} */ public String l10nPackage(String arg0) { String fmt = ""; String id = "L10N_PACKAGE" ; String subsystem = "I18N" ; Object [] args = { arg0 }; String output = MessageFormat.format(l10n.get(id) , args); if (getExtendedFormat()) { DateFormat dformat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG); fmt = "<"+dformat.format(new Date())+"><"+subsystem+"><"+id+">"; } return fmt+output; } /** * カタログ サブシステム: {0} */ public String subSystem(String arg0) { String fmt = ""; String id = "SUBSYSTEM" ; String subsystem = "I18N" ; Object [] args = { arg0 }; String output = MessageFormat.format(l10n.get(id) , args); if (getExtendedFormat()) { DateFormat dformat = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.LONG); fmt = "<"+dformat.format(new Date())+"><"+subsystem+"><"+id+">"; } return fmt+output; } }