Skip to content

Commit f3debfb

Browse files
committed
Added method to retrieve the codes of a specific bundle.
For example if you want to send all client messages contained in messagesclien bundle to the browser using i18next, you can now retrieve all codes contained in the messagesclient bundle.
1 parent 8daadf2 commit f3debfb

File tree

1 file changed

+36
-4
lines changed

1 file changed

+36
-4
lines changed

grails-core/src/main/groovy/org/grails/spring/context/support/ReloadableResourceBundleMessageSource.java

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@
2323
import java.io.InputStream;
2424
import java.io.InputStreamReader;
2525
import java.text.MessageFormat;
26-
import java.util.ArrayList;
27-
import java.util.List;
28-
import java.util.Locale;
29-
import java.util.Properties;
26+
import java.util.*;
3027
import java.util.concurrent.Callable;
3128
import java.util.concurrent.ConcurrentHashMap;
3229
import java.util.concurrent.ConcurrentMap;
@@ -153,6 +150,41 @@ public void setBasename(String basename) {
153150
setBasenames(basename);
154151
}
155152

153+
/**
154+
* Retrieves all codes from one or multiple basenames
155+
* @param locale the locale
156+
* @param basenames the basenames of the bundle
157+
* @return a list with all codes from valid registered bundles
158+
*/
159+
public List<String> getBundleCodes(Locale locale,String...basenames){
160+
List<String> validBaseNames = getValidBasenames(basenames);
161+
162+
List<String> codes = new ArrayList<>();
163+
for(String basename: validBaseNames){
164+
List<Pair<String, Resource>> filenamesAndResources = calculateAllFilenames(basename,locale);
165+
for (Pair<String, Resource> filenameAndResource : filenamesAndResources) {
166+
if(filenameAndResource.getbValue() != null) {
167+
PropertiesHolder propHolder = getProperties(filenameAndResource.getaValue(), filenameAndResource.getbValue());
168+
codes.addAll(propHolder.getProperties().stringPropertyNames());
169+
}
170+
}
171+
}
172+
return codes;
173+
}
174+
175+
protected List<String> getValidBasenames(String[] basenames){
176+
List<String> validBaseNames = new LinkedList<>();
177+
for(String basename:basenames){
178+
for(int i=0;i<this.basenames.length;i++){
179+
if(basenames[i].equals(basename)){
180+
validBaseNames.add(basename);
181+
break;
182+
}
183+
}
184+
}
185+
return validBaseNames;
186+
}
187+
156188
/**
157189
* Set an array of basenames, each following the basic ResourceBundle convention
158190
* of not specifying file extension or language codes, but in contrast to

0 commit comments

Comments
 (0)