/*
   *   Processes resource bundle for specified locale
   * */
  private static void saveProperties(
      Locale locale, Hashtable<String, String> bundle, String bundleName) {

    for (Map.Entry property : bundle.entrySet()) {

      String key = (String) property.getKey();
      String value = (String) property.getValue();

      try {

        MessageSourcePK messageSourcePK = new MessageSourcePK(key, locale.toString());
        MessageSource messageSource =
            MessageSourceLocalServiceUtil.fetchMessageSource(messageSourcePK);

        if (messageSource == null) {

          messageSource = MessageSourceUtil.create(messageSourcePK);
          messageSource.setValue(value);
          messageSource.setBundle(bundleName);
          MessageSourceLocalServiceUtil.updateMessageSource(messageSource);
        }

      } catch (SystemException ex) {
        ex.printStackTrace();
      } catch (Exception ex) {
        ex.printStackTrace();
      }
    }
  }
 public static String getMessage(Locale locale, String key) {
   try {
     // It retrieves the value based on the key and locale, it does not take
     // into account the bundle name
     MessageSourcePK messageSourcePK = new MessageSourcePK(key, locale.toString());
     String value = null;
     try {
       MessageSource ms = MessageSourceLocalServiceUtil.getMessageSource(messageSourcePK);
       value = ms.getValue();
     } catch (NoSuchMessageSourceException ignored) {
     }
     return (String) value;
   } catch (Exception e) {
     e.printStackTrace();
   }
   return null;
 }