Para responder a su pregunta, yo elegiría (2).
En la práctica, encontré que para mí es mucho más fácil usar algo más que los paquetes de recursos de Java.
Yo personalmente uso una forma diferente de manejar esto. Utilizo gettext (hay un archivo llamado GetTextResource.java que debe usar en su aplicación para beneficiarse de las extensiones gettext - vea here).
Si está familiarizado con gettext definitivamente encontrará que este enfoque es mucho más fácil y práctico. Simplemente le da a sus traductores los archivos po (que se pueden editar con poedit). Desde los archivos po, usted crea la clase java que usará dentro de su aplicación (esto se hace usando msgfmt - especificando parámetros para la compilación java de los archivos po). Los archivos Po se pueden actualizar bastante fácilmente utilizando el comando xgettext (desde la línea de comandos).
Por supuesto, todo está dentro del gettext manual.
Ventajas:
gettext le ofrece una manera de seleccionar la forma plural [No hay más mensajes como: "N archivo (s) borrado" (donde N es un número) - ver ngettext.
un método de secuencias de comandos para la traducción de cuerdas una vez que sus archivos de Java se actualizan con nuevos tokens
sin necesidad de acceder a cada cadena usando algunas macros (como Translate (DELETE_BUTTON_MACRO)). Que acaba de escribir el código de la siguiente manera:
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);
}
}
}
Aquí es una muestra
// example
// similar for plural
import static translateutil.TranslateUtil._;
System.out.println(_("The english text"));
No importa lo que la elección es: Buena suerte!
¡genial! Sé mucho de lo que planteas aquí, pero lo has aclarado organizándolo. Y con suerte los stackoverflowes futuros lo encontrarán útil. – jlarson