public function convertRequiredForTranslatedFields(array $rules)
    {
        $isTranslatedKeys = [];  // list of rule keys that are translated
        $hasRequiredKeys  = [];  // list of rule keys that are translated and 'required'

        foreach ($rules as $index => $rule) {

            if ( ! $rule->isTranslated()) {
                continue;
            }

            $isTranslatedKeys[] = $rule->key() ?: '';

            if (in_array('required', $rule->rules())) {
                $hasRequiredKeys[ $index ] = $rule->key() ?: '';
            }
        }

        // For each required translated rule,
        // get all the keys for all other translated field rules (except itself)
        // and inject them into a required_with rule, that replaces the required rule.

        foreach ($hasRequiredKeys as $index => $key) {

            $rule = $rules[ $index ];

            $this->replaceRequiredForRequiredWith($rule, array_diff($isTranslatedKeys, [ $key ]));
        }

        return $rules;
    }