質問: 始めまして。 format関数に関して、お聞きしたいと思います。 現在、エラーメッセージの多言語化をしているのですが、そこで躓いてしまいました。 例えば、class A というものを作り、そのインスタンスメソッドとして、ある例外SomeExceptionを投げるメソッドmeth()を作ったとします。 つまり、 public class A { public void meth(int a, int b) throws SomeException{ // do something } } となっています。 このときに、エラーメッセージを、日本語では、 「クラスAのメソッドmeth(int, int)で、ある例外SomeExceptionが発生しました。」 と表示させたいです。 英語版では、(気分的にであって、文法は目をつぶってください) "An exception of SomeException is thrown at the method 'meth(int, int)' with some instance of class 'A'. " としたいです。 ここで、書式文字列をそれぞれ "クラス%2$sのメソッド%3$sで、ある例外%1$sが発生しました。" "An exception of %1$s is thrown at the method \'%3$s\' with some instance of class \'%2$s\' " とし、あてはめる値を "SomeException", "A", "meth(int,int)" とすれば、うまくいきそうなことが分かりました。 使い方としては、System.err.println(String.format(...))や System.out.printf(...)等を考えています。 ここで、これらの書式文字列をプロパティファイルから取得したいのですが、固定文字列でないと、出力が失敗してしまいます。(定数ではなく変数を使用すると失敗するようです。) 書式文字列のようなものをコンパイル後に(比較的自由に)変更できる方法はないものでしょうか? もちろん、正常に書式文字列の形式になっていないものがプロパティファイルから取得されてしまった場合の例外処理はきちんと行うつもりですが、 今回焦点を当てているのは、固定文字列でなくてもformat関数が使える方法が知りたいのです。 長文かつ、例が見にくいようなものを出してしまって、理解できない内容になっているかもしれませんが、 雰囲気だけでももしわかってくださって、対応方法がわかる方がいらっしゃいましたら、 ご教授をお願いしたいと思います。 よろしくお願いいたします。
回答: 「機能Aを実行中にエラーBが検出されました。」 「An error B was detected while executing function A.」 のように、翻訳すると引数の順番が変わってしまうことがあ る。 MessageFormatを調べると良いよ。