📄 xmlresourcebundle.java
字号:
/* CVS ID: $Id: XMLResourceBundle.java,v 1.3 2000/12/30 10:39:09 wastl Exp $ */package net.wastl.webmail.xml;import java.util.*;import org.apache.xerces.framework.*;import org.apache.xerces.parsers.*;import org.w3c.dom.*;import net.wastl.webmail.server.WebMailServer;/* * XMLResourceBundle.java * * Created: Sun Mar 5 17:59:33 2000 * * Copyright (C) 2000 Sebastian Schaffert * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *//** * A ResourceBundle implementation that uses a XML file to store the resources. * * @author Sebastian Schaffert * @version */public class XMLResourceBundle extends ResourceBundle { protected boolean debug=false; protected Document root; protected String language; protected Element elem_locale; protected Element elem_common; protected Element elem_default; public XMLResourceBundle(String resourcefile, String lang) throws Exception { DOMParser parser=new DOMParser(); parser.parse("file://"+resourcefile);// parser.parse(resourcefile); root = parser.getDocument(); language=lang; NodeList nl=root.getElementsByTagName("COMMON"); if(nl.getLength()>0) { elem_common=(Element)nl.item(0); } else { elem_common=null; } elem_locale=null; elem_default=null; /* Now the locale specific stuff; fallback to default if not possbile */ String default_lang=root.getDocumentElement().getAttribute("default"); if(debug) System.err.println("XMLResourceBundle ("+resourcefile+"): Default language '"+default_lang+"'."); nl=root.getElementsByTagName("LOCALE"); for(int i=0;i<nl.getLength();i++) { Element e=(Element)nl.item(i); if(e.getAttribute("lang").equals(lang)) { elem_locale=e; } if(e.getAttribute("lang").equals(default_lang)) { elem_default=e; } } } protected String getResult(Element element, String key) { NodeList nl=element.getElementsByTagName("RESOURCE"); for(int i=0;i<nl.getLength();i++) { Element e=(Element)nl.item(i); if(e.getAttribute("name").equals(key)) { String s=""; NodeList textl=e.getChildNodes(); for(int j=0;j<textl.getLength();j++) { if(debug) System.err.println("XMLResourceBundle ("+key+"): Type "+textl.item(j).getNodeName()); if(textl.item(j).getNodeName().equals("#text") || textl.item(j).getNodeName().equals("#cdata-section")) { s+=textl.item(j).getNodeValue(); } } return s; } } return null; } public Object handleGetObject(String key) { String retval=null; if(elem_locale != null) { retval=getResult(elem_locale,key); } if(retval == null && elem_default != null) { retval=getResult(elem_default,key); } if(retval == null && elem_common != null) { retval=getResult(elem_common,key); } if(debug) System.err.println("XMLResourceBundle: "+key+" = "+retval); return retval; } protected void getKeys(Element element, Hashtable hash) { NodeList nl=element.getElementsByTagName("RESOURCE"); for(int i=0;i<nl.getLength();i++) { hash.put(((Element)nl.item(i)).getAttribute("name"),""); } } public Enumeration getKeys() { Hashtable prop=new Hashtable(); if(elem_common != null) { getKeys(elem_common,prop); } if(elem_default != null) { getKeys(elem_default,prop); } if(elem_locale != null) { getKeys(elem_locale,prop); } return prop.keys(); } public static synchronized ResourceBundle getBundle(String name, Locale locale, ClassLoader cl) throws MissingResourceException { String lang=locale.getLanguage(); ResourceBundle ret=null; try { ret=new XMLResourceBundle(WebMailServer.getServer().getProperty("webmail.template.path")+ System.getProperty("file.separator")+name+".xml",lang); } catch(Exception ex) { ex.printStackTrace(); throw new MissingResourceException("Resource not found",name,""); } return ret; }} // XMLResourceBundle
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -