To answer your question I would chose (2).
In practice I found that for me it is a lot easier to use something else rather than the Java resource bundles.
I personally use a different way of handling this. I use the gettext way (there is a file there called GetTextResource.java that you must use in your application to benefit from the gettext extensions - see here).
If you're familiar with gettext you will definitely find this approach a lot easier and practical. You simply give to your translators the po files (which can be edited with poedit). From the po files you create the java class you will use inside your application (this is done using msgfmt - specifying parameters for java compilation of the po files). Po files can be updated fairly easy using the xgettext command (from command line).
Of course everything is inside the gettext manual.
Advantages:
gettext offers you a way to select the plural form [ No more messages like: "N file(s) deleted" (where N is a number) - see ngettext.
a scriptable method for translating strings once your java files are updated with new tokens
no need to access each string using some macros (like Translate(DELETE_BUTTON_MACRO) ). You just write your code like this:
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);
}
}
}
Here is a sample
// example
// similar for plural
import static translateutil.TranslateUtil._;
System.out.println(_("The english text"));
No matter what you choice is: Good luck!