@Cacheable(value = "locale-messages", key = "#locale.toString().concat('-countries-map')") public Map<String, String> getCountries(Locale locale) { ResourceBundle resource = ResourceBundle.getBundle("i18n/messages", locale, new UTF8Control()); Map<String, String> dbCountries = countryManager.retrieveCountriesAndIsoCodes(); Map<String, String> countries = new LinkedHashMap<String, String>(); for (String key : dbCountries.keySet()) { countries.put(key, resource.getString(buildInternationalizationKey(CountryIsoEntity.class, key))); } FunctionsOverCollections.sortMapsByValues(countries); return countries; }