code: public Map<String, Integer> getTranslationProgressMap(String appid) {
  		if (dao == null) {
  			return Collections.emptyMap();
  		}
  		Sysprop progress;
  		if (langProgressCache.getProperties().isEmpty()) {
  			progress = dao.read(appid, progressKey);
  			if (progress != null) {
  				langProgressCache = progress;
  			}
  		} else {
  			progress = langProgressCache;
  		}
  
  		Map<String, Integer> progressMap = new HashMap<>(ALL_LOCALES.size());
  		boolean isMissing = progress == null;
  		if (isMissing) {
  			progress = new Sysprop(progressKey);
  			progress.addProperty(getDefaultLanguageCode(), 100);
  		}
  		for (String langCode : ALL_LOCALES.keySet()) {
  			Object percent = progress.getProperties().get(langCode);
  			if (percent != null && percent instanceof Number) {
  				progressMap.put(langCode, (Integer) percent);
  			} else {
  				progressMap.put(langCode, 0);
  			}
  		}
  		if (isMissing) {
  			dao.create(appid, progress);
  			langProgressCache = progress;
  		}
  		return progressMap;
  	}
docs: Returns a map of language codes and the percentage of translated string for that language.
  @param appid appid name of the {@link com.erudika.para.core.App}
  @return a map indicating translation progress