あなたの質問に答えるために私は(2)を選びました。
実際には、Javaリソースバンドルよりも他のものを使用する方がはるかに簡単であることがわかりました。
私は個人的にこれを処理する別の方法を使用します。私はgettextの方法を使用しています(gettext拡張機能を利用するには、アプリケーションで使用する必要のあるGetTextResource.javaというファイルがあります。ここを参照してください)。
gettextに精通している場合は、このアプローチがはるかに簡単で実用的であることは間違いありません。翻訳者にpoファイル(poeditで編集可能)を渡すだけです。poファイルから、アプリケーション内で使用するjavaクラスを作成します(これは、msgfmtを使用して行われます-poファイルのjavaコンパイル用のパラメーターを指定します)。Poファイルは、(コマンドラインから)xgettextコマンドを使用してかなり簡単に更新できます。
もちろん、すべてがgettextマニュアルの中にあります。
利点:
gettextは、複数形を選択する方法を提供します[「Nファイルが削除されました」(Nは数字)のようなメッセージはもうありません-ngettextを参照してください。
Javaファイルが新しいトークンで更新されたら文字列を翻訳するためのスクリプト可能なメソッド
一部のマクロ(Translate(DELETE_BUTTON_MACRO)など)を使用して各文字列にアクセスする必要はありません。次のようにコードを記述します。
package translateutil;
import gnu.gettext.GettextResource;
import java.util.ResourceBundle;
import java.util.Locale;
public class TranslateUtil
{
private static ResourceBundle myResources =null;
public static boolean init(Locale loc, String resourceName)
{
boolean bRet = true;
Locale.setDefault(loc);
try
{
myResources = ResourceBundle.getBundle(resourceName);
System.out.printf( _("Current language: %s\n"),
Locale.getDefault().getDisplayName() );
System.out.printf( _("%s resource found\n"),
myResources.getClass().getName() );
}
catch(Exception e)
{
// let the application go on in English in case the ResourceBundle
// was not found. Notify about the error
bRet = false;
System.out.println( e.toString() );
myResources = null;
}
return bRet;
}
public static String _(String str)
{
if (myResources == null)
{
return str;
}
{
return GettextResource.gettext(myResources, str);
}
}
public static String _Plural(String singular, String plural, long param)
{
if (myResources == null)
{
if (param == 1)
{
return singular;
}
else
{
return plural;
}
}
else
{
return GettextResource.ngettext(myResources, singular, plural, param);
}
}
}
これがサンプルです
// example
// similar for plural
import static translateutil.TranslateUtil._;
System.out.println(_("The english text"));
あなたが何を選んだとしても:頑張ってください!