The code seems to use the I18n::locale() https://github.com/cakephp-fr/recaptcha/blob/master/src/View/Helper/RecaptchaHelper.php#L64-L67 if the param lang is empty (btw it's really a good idea), but the ConfigValidator doesn't like when we don't specify any lang option : https://github.com/cakephp-fr/recaptcha/blob/master/src/Validation/ConfigValidator.php#L93-L98
Also, maybe set the lang param to be empty by default or to use the I18n::locale()? https://github.com/cakephp-fr/recaptcha/blob/master/src/View/Helper/RecaptchaHelper.php#L40
Also, we probably should do a substr(I18n::locale(), 0, 2)) to get the I18n::locale() value because the locale value with I18n::locale() can also be full named such as fr_FR, en_US etc.
Edit :
After some more tests, by removing the lang option in the config, the validator pass, but the option is defined to en : https://github.com/cakephp-fr/recaptcha/blob/master/src/View/Helper/RecaptchaHelper.php#L40 so the condition :
$lang = $this->config('lang');
if (empty($lang)) {
$this->config('lang', I18n::locale());
}
is always false.