package net.sourceforge.jtds.jdbc;
import
java.text.MessageFormat;
import java.util.Enumeration;
import
java.util.Map;
import java.util.ResourceBundle;
public final class
Messages {
private static final String DEFAULT_RESOURCE =
"net.sourceforge.jtds.jdbc.Messages"; //默认得资源
private static
ResourceBundle defaultResource; //和locale的绑定
private Messages()
{
}
public static String get(String key) {
return
get(key, null);
}
public static String get(String key, Object
param1) {
Object args[] = {param1};
return get(key,
args);
}
static String get(String key, Object param1, Object
param2) {
Object args[] = {param1, param2};
return
get(key, args);
}
private static String get(String key,
Object[] arguments) {
try {
ResourceBundle bundle =
loadResourceBundle();
String formatString =
bundle.getString(key);
// No need for any formatting if no
parameters are specified
if (arguments == null ||
arguments.length == 0) {
return
formatString;
} else {
MessageFormat formatter
= new MessageFormat(formatString);
return
formatter.format(arguments);
}
} catch
(java.util.MissingResourceException mre) {
throw new
RuntimeException("No message resource found for message property " +
key);
}
}
private static ResourceBundle
loadResourceBundle() {
if (defaultResource == null)
{
defaultResource =
ResourceBundle.getBundle(DEFAULT_RESOURCE);
}
return
defaultResource;
}
static void loadDriverProperties(Map
propertyMap, Map descriptionMap) {
final ResourceBundle bundle =
loadResourceBundle();
final Enumeration keys =
bundle.getKeys();
while (keys.hasMoreElements())
{
final String key = (String)
keys.nextElement();
final String descriptionPrefix =
"prop.desc.";
final String propertyPrefix =
"prop.";
if (key.startsWith(descriptionPrefix))
{
descriptionMap.put(key.substring(descriptionPrefix.length()),
bundle.getString(key));
}
else if
(key.startsWith(propertyPrefix))
{
propertyMap.put(key.substring(propertyPrefix.length()),
bundle.getString(key));
}
}
}
}
上面代码中默认得绑定名为:"net.sourceforge.jtds.jdbc.Messages".其实就是以工程为根目录,寻找文件Messages.properties.这里查找的方式和类是一样的.比如:"net.sourceforge.jtds.jdbc.Messages",就是工程根目录下的net/sourceforge/jtds/jdbc/下的Messages.properties文件.
这个文件定义很多的属性,要得到只要用get方法.
注意这里的defaultResource
=
ResourceBundle.getBundle(DEFAULT_RESOURCE);没有设定Locale值,所以文件名为Messages.properties.如果设置了Locale值的话,例如:defaultResource
= ResourceBundle.getBundle(DEFAULT_RESOURCE,
Locale.ENGLISH);那么它就会去查找文件Messages_en.properties.其他类似加后缀(Locale.CHINA是Messages_zh.properties).
关于java.text.MessageFormat类,下面通过一个例子就可以说明:
MessageFormat
mf = new MessageFormat("You have {0} messages.");
Object[] arguments =
{"no"};
System.out.println(mf.format(arguments)); //"You have no
messages."
关于String.startsWith(String prex)是测试字符串是否以prex开头.