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);
	}
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 ) ; }
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