Esempio n. 1
0
 private void checkForEmptyPropertyAndDelete(Locale locale, String bundleName) {
   // TODO: RH: check if necessary although, as saveOrUpdateProperties does already delete
   // properties
   if (i18nMgr.getPropertiesWithoutResolvingRecursively(locale, bundleName).isEmpty()) {
     i18nMgr.deleteProperties(locale, bundleName);
     // TODO: RH: .cvs anpassen!
   }
 }
Esempio n. 2
0
 /**
  * Check for keys that exist in target languages but not in EN or DE. Delete such keys in the
  * target languages
  *
  * @param reallyRemoveIt true: really delete; false: verbose dry run
  * @param referenceLanguages array that contains the language keys that serves as a reference
  *     (e.g. en and de)
  * @param languages the languages that should be cleaned up
  */
 public void removeDeletedKeys(
     boolean reallyRemoveIt, String[] referenceLanguages, Set<String> languages) {
   // first get all available keys from de and en language
   Set<String> validCombinedKeys = new HashSet<String>();
   // copy list to prevent concurrent modification exception
   List<String> allBundles = new ArrayList<String>(I18nModule.getBundleNamesContainingI18nFiles());
   for (String bundleName : allBundles) {
     for (String refLangKey : referenceLanguages) {
       Properties properties =
           i18nMgr.getPropertiesWithoutResolvingRecursively(
               i18nMgr.getLocaleOrNull(refLangKey), bundleName);
       if (properties == null) {
         throw new OLATRuntimeException("Invalid reference language::" + refLangKey, null);
       } else {
         for (Object keyObj : properties.keySet()) {
           String key = (String) keyObj;
           String combinedKey = bundleName + ":" + key;
           validCombinedKeys.add(combinedKey);
         }
       }
     }
   }
   log.info(
       "removeDeletedKeys: found "
           + validCombinedKeys.size()
           + " valid keys in "
           + ArrayHelper.toString(referenceLanguages));
   //
   // For each language except DE and EN, go through all i18n files and
   // remove keys not in the valid set
   for (String langKey : languages) {
     boolean isRefLang = false;
     for (String refLangKey : referenceLanguages) {
       if (refLangKey.equals(langKey)) {
         isRefLang = true;
         break;
       }
     }
     if (isRefLang) continue;
     // Not a reference language - delete from here
     Locale locale = i18nMgr.getLocaleOrNull(langKey);
     for (String bundleName : allBundles) {
       Properties properties =
           i18nMgr.getPropertiesWithoutResolvingRecursively(locale, bundleName);
       int propCount = properties.size();
       // copy keys to prevent concurrent modification
       Set<String> availableKeys = new HashSet<String>();
       for (Object key : properties.keySet()) {
         availableKeys.add((String) key);
       }
       for (String key : availableKeys) {
         String combinedKey = bundleName + ":" + key;
         if (!validCombinedKeys.contains(combinedKey)) {
           if (reallyRemoveIt) {
             log.info(
                 "Deleting "
                     + langKey
                     + ":"
                     + bundleName
                     + ":"
                     + key
                     + " - does not exist in "
                     + ArrayHelper.toString(referenceLanguages));
             properties.remove(key);
           } else {
             log.info(
                 "Should be deleted: "
                     + langKey
                     + ":"
                     + bundleName
                     + ":"
                     + key
                     + " - does not exist in "
                     + ArrayHelper.toString(referenceLanguages));
           }
         }
       }
       int delCount = (propCount - properties.size());
       if (reallyRemoveIt && delCount > 0) {
         // only save when changed
         i18nMgr.saveOrUpdateProperties(properties, locale, bundleName);
         log.info(
             "For language::"
                 + langKey
                 + " the in bundle:: "
                 + bundleName
                 + " deleted "
                 + delCount
                 + " keys");
       }
       // delete empty bundles
       if (reallyRemoveIt && properties.size() == 0) {
         i18nMgr.deleteProperties(locale, bundleName);
         log.info(
             "Bundle:: "
                 + bundleName
                 + " deleted for language "
                 + langKey
                 + "entirely because it was empty");
       }
     }
   }
 }