(確認したかったこと)
- リソースをファイルシステム上に置いておくのではない方法での使い方。
(結論)
- ResouceBundle.Controlのサブクラスを作る方向で考えていたが、とりあえずListResouceBundleでも十分なのかなと。
- いずれにしても何とでもなりそうなので、とりあえずResouceBundleを使ってプロパティファイルを使っていても、後で動的な管理に差し替えることは可能だろう。
- けど念のため、ResouceBundle自体をそこらじゅうで使うのではなく、これにたいするFacade的なラッパー的な何かを用意しておいた方がいいだろう。
----
package i18n;
import java.util.ListResourceBundle;
import java.util.Locale;
import java.util.ResourceBundle;
public class Test {
public static void main(String[] args){
System.out.println("value for 'key1'");
for(Sample s : Sample.values())
System.out.println(String.format(
"%-20s : %s",
s.name(),
s.get().getString("key1")
));
}
interface Testable{
ResourceBundle get();
}
enum Sample implements Testable{
SIMPLE_CASE(){
public ResourceBundle get(){
return ResourceBundle.getBundle("i18n.hoge");
}
},
OF_JAPAN(){
public ResourceBundle get(){
return ResourceBundle.getBundle("i18n.hoge", Locale.JAPAN);
}
},
OF_ENGLISH(){
public ResourceBundle get(){
return ResourceBundle.getBundle("i18n.hoge", Locale.ENGLISH);
}
},
OF_US(){
public ResourceBundle get(){
return ResourceBundle.getBundle("i18n.hoge", Locale.US);
}
},
NAMED_CUSTOM(){
public ResourceBundle get(){
return new MyResourceBundle("key1");
}
}
}
static class MyResourceBundle extends ListResourceBundle{
private final String[] keys;
MyResourceBundle(String... keys) {
this.keys = keys;
}
@Override
protected Object[][] getContents() {
Object[][] con = new Object[keys.length][2];
for(int i = 0; i < keys.length; i++){
con[i] = new Object[]{keys[i], "To tell the truth, I don't know about " + keys[i] + "."};
}
return con;
}
}
}
0 件のコメント:
コメントを投稿