要回答您的问题,我会选择(2)。
在实践中,我发现对我来说使用其他东西比使用 Java 资源包要容易得多。
我个人使用不同的方式来处理这个问题。我使用 gettext 方式(那里有一个名为 GetTextResource.java 的文件,您必须在应用程序中使用它才能从 gettext 扩展中受益 - 请参见此处)。
如果您熟悉 gettext,您肯定会发现这种方法更简单实用。您只需将 po 文件提供给您的翻译人员(可以使用poedit进行编辑)。从 po 文件中创建将在应用程序中使用的 java 类(这是使用 msgfmt 完成的 - 为 po 文件的 java 编译指定参数)。使用 xgettext 命令(从命令行)可以相当容易地更新 Po 文件。
当然,一切都在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"));
不管你选择什么:祝你好运!