1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.cms.i18n;
35
36 import info.magnolia.cms.util.ClasspathResourcesUtil;
37
38 import java.io.IOException;
39 import java.io.InputStream;
40 import java.io.Serializable;
41 import java.util.Iterator;
42 import java.util.Locale;
43 import java.util.MissingResourceException;
44 import java.util.PropertyResourceBundle;
45 import java.util.ResourceBundle;
46
47 import org.apache.commons.collections.IteratorUtils;
48 import org.apache.commons.io.IOUtils;
49 import org.apache.commons.lang.StringUtils;
50
51
52
53
54
55
56
57 public class DefaultMessagesImpl extends AbstractMessagesImpl implements Serializable {
58
59 private static final long serialVersionUID = 6557257240676973699L;
60
61 protected DefaultMessagesImpl(String basename, Locale locale) {
62 super(basename, locale);
63 }
64
65
66
67
68
69
70 @Override
71 public String get(String key) {
72 if(key == null){
73 return "??????";
74 }
75 try {
76 return getBundle().getString(key);
77 }
78 catch (MissingResourceException e) {
79 return "???" + key + "???";
80 }
81 }
82
83
84
85
86 protected ResourceBundle getBundle() {
87 if (bundle == null) {
88 InputStream stream = null;
89 try {
90
91 final String path = "/" + StringUtils.replace(basename, ".", "/");
92 final Locale locale = getLocale();
93 final Locale defaultLocale = MessagesManager.getInstance().getDefaultLocale();
94
95 stream = ClasspathResourcesUtil.getStream(path + "_" + locale.getLanguage() + "_" + locale.getCountry() + ".properties", false);
96 if (stream == null) {
97 stream = ClasspathResourcesUtil.getStream(path + "_" + locale.getLanguage() + ".properties", false);
98 }
99 if (stream == null) {
100 stream = ClasspathResourcesUtil.getStream(path + "_" + defaultLocale.getLanguage() + ".properties", false);
101 }
102 if (stream == null) {
103 stream = ClasspathResourcesUtil.getStream(path + ".properties", false);
104 }
105
106 if (stream != null) {
107 bundle = new PropertyResourceBundle(stream);
108 }
109 else {
110 bundle = ResourceBundle.getBundle(getBasename(), locale);
111 }
112 }
113 catch (IOException e) {
114 log.error("can't load messages for " + basename);
115 } finally {
116 IOUtils.closeQuietly(stream);
117 }
118 }
119 return bundle;
120 }
121
122 @Override
123 public void reload() throws Exception {
124 this.bundle = null;
125 }
126
127
128
129
130 @Override
131 public Iterator<String> keys() {
132 ResourceBundle bundle = this.getBundle();
133 if(bundle != null) {
134 return IteratorUtils.asIterator(bundle.getKeys());
135 }
136 return IteratorUtils.EMPTY_ITERATOR;
137 }
138 }