001 package com.khubla.pragmatach.plugin.i8n;
002
003 import java.io.InputStream;
004 import java.util.Date;
005 import java.util.Hashtable;
006 import java.util.Properties;
007
008 import com.khubla.pragmatach.framework.api.I8NProvider;
009 import com.khubla.pragmatach.framework.api.PragmatachException;
010 import com.khubla.pragmatach.plugin.i8n.plugin.PluginImpl;
011
012 /**
013 * @author tome
014 */
015 public class I8NImpl implements I8NProvider {
016 /**
017 * props file
018 */
019 private final static String I8N_FILE = "i8n.properties_";
020 /**
021 * properties
022 */
023 private final Hashtable<String, Properties> localeData = new Hashtable<String, Properties>();
024 /**
025 * the owning plugin
026 */
027 private final PluginImpl plugin;
028
029 /**
030 * ctor
031 */
032 public I8NImpl(PluginImpl plugin) {
033 this.plugin = plugin;
034 }
035
036 @Override
037 public String getDate(String locale, Date date) throws PragmatachException {
038 return date.toString();
039 }
040
041 /**
042 * get the props for a certain locale
043 */
044 private Properties getLocaleData(String locale) throws PragmatachException {
045 try {
046 /*
047 * check locally
048 */
049 Properties properties = localeData.get(locale);
050 if (null != properties) {
051 return properties;
052 } else {
053 /*
054 * get resource
055 */
056 final InputStream inputStream = plugin.getPluginContext().getResourceLoader().getResource(getLocalfileResourceName(locale));
057 if (null != inputStream) {
058 properties = new Properties();
059 properties.load(inputStream);
060 localeData.put(locale, properties);
061 return properties;
062 } else {
063 return null;
064 }
065 }
066 } catch (final Exception e) {
067 throw new PragmatachException("Exception in getLocaleData", e);
068 }
069 }
070
071 private String getLocalfileResourceName(String locale) {
072 return I8N_FILE + locale;
073 }
074
075 @Override
076 public String getName() {
077 return "Pragmatach file-based i8n provider";
078 }
079
080 @Override
081 public String getString(String locale, String name) throws PragmatachException {
082 final Properties properties = getLocaleData(locale);
083 if (null != properties) {
084 return properties.getProperty(name);
085 }
086 return null;
087 }
088 }