Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AbstractValidator does not use messageKey when translating messages #1

Closed
weierophinney opened this issue Dec 31, 2019 · 5 comments
Closed
Labels
Question Further information is requested

Comments

@weierophinney
Copy link
Member

I would like to translate validation messages using messageKeys as message strings may change. But translateMessage in AbstractValidator does not use $messageKey parameter for translating, even if it is defined as method parameter. It uses message string to translate.

protected function translateMessage($messageKey, $message)
{
    $translator = $this->getTranslator();
    if (! $translator) {
        return $message;
    }
    return $translator->translate($message, $this->getTranslatorTextDomain());
}

Originally posted by @bkilinc at zendframework/zend-validator#260

@weierophinney weierophinney added the Question Further information is requested label Dec 31, 2019
@weierophinney
Copy link
Member Author

@bkilinc can you maybe outline a test case for what you'd like the behavior to be?


Originally posted by @Ocramius at zendframework/zend-validator#260 (comment)

@weierophinney
Copy link
Member Author

I want to use something like this as a translator object. This is not possible, because AbstractValidator does not pass messageKey to translator object.

class myTranslator implements \Zend\Validator\Translator\TranslatorInterface
{
    protected $translations = [
        'dateInvalid'     => "Invalid type given. String, integer, array or DateTime expected",
        'dateInvalidDate'=> "The input does not appear to be a valid date",
        'dateFalseFormat' => "The input does not fit the date format '%format%'",
    ];

    public function translate($messageKey, $textDomain = 'default', $locale = null)
    {
        return $this->translations[$messageKey];
    }
}

Originally posted by @bkilinc at zendframework/zend-validator#260 (comment)

@weierophinney
Copy link
Member Author

@bkilinc

  1. You can use zendframework/zend-i18n-resources and the messages of all validators are already translated. (you may already have seen this)
  2. The AbstractValidator uses the text of the message, because if no translation exists than the message itself is used as fallback by the translator.
  3. You can create a pull request to contribute your proposal. But keep in mind that every change of the current behaviour means a BC break and the need of a new major version. Because nobody knows if a user already has dateInvalid or dateFalseFormat in his translation files which can then lead to incorrect translations.

Originally posted by @froschdesign at zendframework/zend-validator#260 (comment)

@weierophinney
Copy link
Member Author

Thanks, I was creating my custom validator. I would like to use messageKey for looking up translations, because default message may also change. when I saw
"protected function translateMessage($messageKey, $message)"
in "AbstractValidator", I thought I could do this. But now I understand that, it is not possible with current implementation.


Originally posted by @bkilinc at zendframework/zend-validator#260 (comment)

@samsonasik
Copy link
Member

I am closing it as it is mostly a question and the solution already provided.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants