code: public static <R> R findResource(
  			ResourceBundle.Control control,
  			String fileName,
  			String fileExtension,
  			Locale locale,
  			Function<String, R> function) {
  		return findResource(control, fileName, fileExtension, "", locale, function);
  	}
docs: Finds and returns a localised resource, using the given {@code function} to validate it.
  <p>
  The function is called for each resource until a non-{@code null} resource is returned or all resources are consumed. The
  resource name is built using the parameters {@code fileName}, {@code fileExtension}, and the given {@code locale}. The
  candidates and fallback locale are obtained from the given resource bundle control.
  <p>
  For example, with the following parameters:
  <ul>
  <li>{@code control} - {@code new ZapResourceBundleControl()}</li>
  <li>{@code fileName} - {@code org.zaproxy.zap.file}</li>
  <li>{@code fileExtension} - {@code ext}</li>
  <li>{@code locale} - {@code es_ES}</li>
  </ul>
  and "en_GB" as fallback locale returned by the {@code control}, it would produce the following resource names:
  
  <pre>
  {@code
  org/zaproxy/zap/file_es_ES.ext
  org/zaproxy/zap/file_es.ext
  org/zaproxy/zap/file.ext
  org/zaproxy/zap/file_en_GB.ext
  org/zaproxy/zap/file_en.ext
  }
  </pre>
  <p>
  The {@code function} could be, for example, the instance method {@code ClassLoader::getResource}.
  
  @param <R> the type of the result.
  @param control the resource bundle control to obtain the candidate and fallback locales and build the resource names.
  @param fileName the base file name.
  @param fileExtension the file extension.
  @param locale the target locale.
  @param function the function that validates and returns the resource.
  @return the resource, or {@code null} if none found.
  @since TODO add version