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.util.Iterator;
41 import java.util.Locale;
42 import java.util.MissingResourceException;
43 import java.util.PropertyResourceBundle;
44 import java.util.ResourceBundle;
45
46 import org.apache.commons.collections.IteratorUtils;
47 import org.apache.commons.lang.StringUtils;
48 import org.apache.commons.io.IOUtils;
49
50
51
52
53
54
55 public class DefaultMessagesImpl extends AbstractMessagesImpl {
56
57 protected DefaultMessagesImpl(String basename, Locale locale) {
58 super(basename, locale);
59 }
60
61
62
63
64
65
66 public String get(String key) {
67 if(key == null){
68 return "??????";
69 }
70 try {
71 return getBundle().getString(key);
72 }
73 catch (MissingResourceException e) {
74 return "???" + key + "???";
75 }
76 }
77
78
79
80
81 protected ResourceBundle getBundle() {
82 if (bundle == null) {
83 InputStream stream = null;
84 try {
85
86 final String path = "/" + StringUtils.replace(basename, ".", "/");
87 final Locale locale = getLocale();
88 final Locale defaultLocale = MessagesManager.getInstance().getDefaultLocale();
89
90 stream = ClasspathResourcesUtil.getStream(path + "_" + locale.getLanguage() + "_" + locale.getCountry() + ".properties", false);
91 if (stream == null) {
92 stream = ClasspathResourcesUtil.getStream(path + "_" + locale.getLanguage() + ".properties", false);
93 }
94 if (stream == null) {
95 stream = ClasspathResourcesUtil.getStream(path + "_" + defaultLocale.getLanguage() + ".properties", false);
96 }
97 if (stream == null) {
98 stream = ClasspathResourcesUtil.getStream(path + ".properties", false);
99 }
100
101 if (stream != null) {
102 bundle = new PropertyResourceBundle(stream);
103 }
104 else {
105 bundle = ResourceBundle.getBundle(getBasename(), locale);
106 }
107 }
108 catch (IOException e) {
109 log.error("can't load messages for " + basename);
110 } finally {
111 IOUtils.closeQuietly(stream);
112 }
113 }
114 return bundle;
115 }
116
117 public void reload() throws Exception {
118 this.bundle = null;
119 }
120
121
122
123
124 public Iterator keys() {
125 ResourceBundle bundle = this.getBundle();
126 if(bundle != null) {
127 return IteratorUtils.asIterator(bundle.getKeys());
128 }
129 return IteratorUtils.EMPTY_ITERATOR;
130 }
131 }