[ZF] Zend_Form errors vertalen naar het nederlands

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Chris -

Chris -

20/04/2012 22:21:08
Quote Anchor link
Heren, en met name degenen die vaak werken met het Zend Framework,

Ik wordt er gek van dat de foutmeldingen die worden gegenereerd door Zend Framework ten alle tijden in het engels zijn. Ik ben niet geinteresseerd in de translate functie omdat het een website is met één taal, Nederlands.

Ik wil dus bijvoorbeeld de volgende foutmelding, welke gegenereerd wordt door Zend_Form vertalen:

Value is required and can't be empty

Wáárom kan dit niet op een makkelijke manier? Als er een makkelijke manier is, wáárom kan ik die dan niet vinden? Er zijn flink wat locale files, en ik heb de locale in zowel de bootstrap als de application.ini in het Nederlands gezet maar de foutmeldingen blijven verdomme in het Engels komen.

Aangezien het gekkenwerk is om 200 formulieren allemaal foutmeldingen in het NL mee te gaan geven, ben ik dus in staat om de Zend Library files aan te passen om ervoor te zorgen dat die foutmeldingen wél in het NL komen.

Ben ik nu serieus de enige met dit probleem of komt dit doordat ik in de afgelopen 6 dagen 10 uur heb geslapen?

Alvast bedankt..

Toevoeging:

Als toevoeging, ik heb het bestand library\Zend\Validate\NotEmpty.php aangepast en hier op regel 72 het volgende aangepast:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
self::IS_EMPTY => "Dit is een verplicht veld en kan niet leeg zijn.",


Dit moet toch makkelijker kunnen zónder dat je direct Zend_Form moet extenden?!

Het gaat er dus om dat de standaard foutmeldingen (isEmpty) gewoon in je eigen locale zou moeten kunnen. Om nog een voorbeeld te geven; wat heeft iemand nou aan een foutmelding als deze: "'test@' is no valid email address in the basic format local-part@hostname". Ja, niets dus.

"'test@' is not a valid email address"
"'test@' is geen geldig email adres"

Is toch veel logischer om dit ergens in een config aan te kunnen geven dan dit voor ieder formulier/element aan te passen? (dat laatste dan voornamelijk voor IsEmpty)
Gewijzigd op 20/04/2012 22:44:43 door Chris -
 
PHP hulp

PHP hulp

05/12/2022 11:31:37
 

20/04/2012 22:28:18
Quote Anchor link
Probeer dit eens:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$someElement
->setRequired(true)
            ->
addValidator('NotEmpty', true, array('messages' => array('isEmpty' => 'Dit is een verplicht veld en kan niet leeg zijn')));
?>
 
Tim S

Tim S

20/04/2012 22:36:56
Quote Anchor link
Als je de volledige Zend Framework package dowload, moet je de map resources/languages/nl even naar je applicatie kopiëren.

En daarna dit in je bootstrap zetten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    protected function _initLanguage()
    {

        $translate = new Zend_Translate(
            array(
                'adapter' => 'array',
                'content' => APPLICATION_PATH . '/languages/nl/Zend_Validate.php',
                'locale'  => 'nl_NL'
            )
        );

        Zend_Registry::set('Zend_Translate', $translate);
        
        $locale = new Zend_Locale($translate->getAdapter()->getLocale());
        Zend_Registry::set('Zend_Locale', $locale);
    }

?>


Door Zend Translate in de registry toe te voegen zou hij dan automatisch de vertaling moeten doorvoeren die je overigens nog kan fine-tunen in APPLICATION_PATH . '/languages/nl/Zend_Validate.php'
 
Chris -

Chris -

20/04/2012 22:39:47
Quote Anchor link
Phoenix, bedankt voor het meewerken. Ik gebruik het echter op een iets andere manier. Ik zal je een voorbeeld geven van hoe ik het nu heb.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
class Form_Register extends Zend_Form
{
    public function init()
    {

        $this->setName("aanmelden");
        $this->setMethod('post');
            
        $this->addElement('text', 'username', array(
            'filters'    => array('StringTrim', 'StringToLower'),
            'validators' => array(
                array(
                    'StringLength', false, array(
                        6, 255, 'messages' => array(
                            Zend_Validate_StringLength::TOO_SHORT => 'De gebruikersnaam is te kort.',
                            Zend_Validate_StringLength::TOO_LONG => 'De gebruikersnaam is te lang'
                        )
                    )
                ),
            ),

            'required'   => true,
        ));
    }
}

?>

Dit gaat natuurlijk nog wel verder, maar zoals je ziet is de opbouw van de foutmeldingen al anders. Dit werkt, behalve dat de foutmelding hierboven pas werkt wanneer er 1 teken is ingevuld. Is er niets in gevuld krijg ik de foutmelding uit mijn beginpost.

Theoretisch gezien zou je jouw optie kunnen "vertalen"/implementeren naar het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
class Form_Register extends Zend_Form
{
    public function init()
    {

        $this->setName("aanmelden");
        $this->setMethod('post');
            
        $this->addElement('text', 'username', array(
            'filters'    => array('StringTrim', 'StringToLower'),
            'validators' => array(
                array(
                    'StringLength', false, array(
                        6, 255, 'messages' => array(
                            Zend_Validate_StringLength::TOO_SHORT => 'De gebruikersnaam is te kort.',
                            Zend_Validate_StringLength::TOO_LONG => 'De gebruikersnaam is te lang'
                        )
                    ),

                    'NotEmpty', true, array(
                        'messages' => array(
                            'isEmpty' => 'test'
                        )
                    )
                ),
            ),

            'required'   => true,
        ));
    }
}

?>


Echter, dit werkt niet. Test komt niet als foutmelding wanneer er niets is ingevuld. Daarnaast zou je dit dan voor ieder element in de formulier moeten doen. Gekkenwerk gezien het aantal formulieren wat ik heb..
 

20/04/2012 22:49:07
Quote Anchor link
Vreemd zou moeten werken, en als je 'NotEmpty', true, array.. wijzigt in 'NotEmpty', false, array..

ps, handel je de errors standaard af, of via een view helper of iets dergelijks?
Gewijzigd op 20/04/2012 22:49:47 door
 
Chris -

Chris -

20/04/2012 22:50:51
Quote Anchor link
Tim S op 20/04/2012 22:36:56:
Als je de volledige Zend Framework package dowload, moet je de map resources/languages/nl even naar je applicatie kopiëren.
[snip]

Door Zend Translate in de registry toe te voegen zou hij dan automatisch de vertaling moeten doorvoeren die je overigens nog kan fine-tunen in APPLICATION_PATH . '/languages/nl/Zend_Validate.php'


Tim, HELD! Bedankt, dit is inderdaad EXACT wat ik nodig had. Ik zweer het, als ik je zie op een meeting of waar dan ook krijg je een biertje, cola, rum-cola of wat dan ook van me. Die kan ik dus mooi aanpassen :) Onwijs bedankt!!!!!

Edit:
Tuurlijk is het zo dat je af en toe een eigen foutmelding moet doen, maar de standaard foutmeldingen moeten gewoon beschikbaar zijn in je eigen taal. Ongelooflijk dat ik hierdoor (serieus waar) 7 uur ben vertraagd. Wordt weer nachtwerk dus. Echt bedankt!
Gewijzigd op 20/04/2012 22:53:04 door Chris -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.