diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/InternationalizationMessagesController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/InternationalizationMessagesController.java index 566dbe4a3..c5ec89f6c 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/InternationalizationMessagesController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/InternationalizationMessagesController.java @@ -7,7 +7,13 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import java.util.Collections; +import java.util.HashSet; import java.util.Locale; +import java.util.MissingResourceException; +import java.util.ResourceBundle; +import java.util.Set; +import java.util.stream.Collectors; /** * @author Bill Smith (wsmith@unicon.net) @@ -22,4 +28,33 @@ public class InternationalizationMessagesController { public ResponseEntity getAll(Locale locale) { return ResponseEntity.ok(messageSource.getMessagesMap(locale)); } + + @GetMapping(value = "/available") + public ResponseEntity getAvailableLocales() { + Set supportedLocaleResourceBundles = getResourceBundles(); + Set supportedLocales = supportedLocaleResourceBundles + .stream() + .map(ResourceBundle::getLocale) + .collect(Collectors.toSet()); + return ResponseEntity.ok(supportedLocales); + } + + /** + * Get all available resource bundles in i18n/messages that matches a locale supported by this JRE. + * + * @return a set of resource bundles for supported locales for this system + */ + private Set getResourceBundles() { + Set resourceBundles = new HashSet<>(); + + for (Locale locale : Locale.getAvailableLocales()) { + try { + resourceBundles.add(ResourceBundle.getBundle("i18n/messages", locale)); + } catch (MissingResourceException e) { + // do nothing + } + } + + return Collections.unmodifiableSet(resourceBundles); + } }