Empfehlungen: Erweiterte Suche

[Gelöst]i18n validation array __()

Datenbankobjekte strukturieren und validieren

[Gelöst]i18n validation array __()

Beitragvon surtic » Sa 1. Mai 2010, 13:57

Guten Tag,

Ich bin gerade an meiner ersten grossen CakePHP Applikation. Nun setze ich mich gerade mit dem Problem der Lokalisierung um.
Mein Problem besteht nun darin, dass ich meine Validation Nachrichten in den Models nicht mit der __('bla', true) Funktion abrufen kann. Ich habe schon verschiedene Webseiten mit diesem Problem durchsucht und auch verschiedene Lösungsansätze versucht, doch leider hat keiner Funktioniert.

Ich hoffe jemand von euch kann mir helfen.

Mit freundlichen Grüssen
surtic


ps. ein kleines beispiel von einem Validation Array
Code: Alles auswählen

var $validate = array(
            'name' => array(
                'rule1' => array(
                        'rule' => 'notEmpty',
                        'message' => 'bla bla'
                        ),
                'rule2' => array(
                        'rule' => array('minLength', 2),
                        'message' => 'bla bla'
                        ),
                'rule3' => array(
                        'rule' => array('maxLength', 40),
                        'message' => 'Bla bla'
                        )
            )
    );
 
Zuletzt geändert von surtic am Sa 1. Mai 2010, 15:54, insgesamt 1-mal geändert.
Benutzeravatar
surtic
 
Beiträge: 7
Registriert: Di 16. Feb 2010, 14:56
Wohnort: Schweiz
CakePHP-Version: 1.3
OS: Ubuntu

Re: i18n validation array __()

Beitragvon mbrod » Sa 1. Mai 2010, 14:54

Habe gerade gestern in diesem Forum ein Beispiel gepostet wie es zumindest bei mir funktioniert.
Das konntest Du aber möglicherweise nicht finden, da das Thema fälschlicherweise mit i18l anstatt mit i18n benannt wurde.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: i18n validation array __()

Beitragvon surtic » Sa 1. Mai 2010, 15:08

hi mbrod,

ja, dass ist eine Möglichkeit habe ich auch schon gesehen. Aber ich kann mich nicht damit anfreunden. Denn so wird es nicht mehr so übersichtlich, da ich Validation Elemente die eigentlich ins Model gehören in einer View habe.

Hier habe ich noch was gefunden mit dem man es beheben könnte, aber anscheinend funktioniert das auch nicht, oder ich wende es falsch an. http://planetcakephp.org/aggregator/items/2504-validation-error-message-i18n.
Benutzeravatar
surtic
 
Beiträge: 7
Registriert: Di 16. Feb 2010, 14:56
Wohnort: Schweiz
CakePHP-Version: 1.3
OS: Ubuntu

Re: i18n validation array __()

Beitragvon Flo » Sa 1. Mai 2010, 15:32

dieshier im AppModel dürfte helfen :)

Code: Alles auswählen
function invalidate($field, $value = true) {
    return parent::invalidate($field, __($value, true));
}
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Re: i18n validation array __()

Beitragvon mbrod » Sa 1. Mai 2010, 15:46

Okay, CakePHP überlässt es ja dem Entwickler, wo man das gerne haben will: Im Model oder im View. Ich weiß, dass mein Beispiel inkonsequent ist, da die Fehlermeldungen mal im Model und mal im View definiert sind. Habe daher die error message vom view ins model verlagert. Und auch das funktioniert bei mir.
model:
Code: Alles auswählen
    var $name = 'User';
    var $validate = array(
        'username' => array(
            'isUnique'=>array(
                'rule' => 'isUnique',
                'message' => 'This username has already been taken'
            ),
            'notempty'=>array(
                'rule'=>'notEmpty',
                'message' => 'This field cannot be left blank'
            )
        ),
        'secret'=>array(
            'minLength'=>array(
                'rule'=>array('minLength', 6),
                'message'=>'Password must be at least 6 characters long.'
            )
        ),
        'email' => array(
            'rule' => array('email'),
            'message'=>'Please supply a valid email address'
        )
    );
 

Im View nun keine error message mehr:
Code: Alles auswählen
<?php echo $form->create('User');?>
    <fieldset>
        <legend><?php __('Add User');?></legend>
    <?php
        echo $form->input('username');
        echo $form->input('secret',array('type'=>'password','label'=>__('Password',true)));
        echo $form->input('email');
        echo $form->input('group');
    ?>
    </fieldset>
<?php echo $form->end(__('Submit',true));?>
 

Und default.po
Code: Alles auswählen
msgid "This field cannot be left blank"
msgstr "Dieses Feld muss ausgefüllt werden"

msgid "Please supply a valid email address"
msgstr "Bitte eine gültige E-Mail Adresse angeben"

msgid "Password must be at least 6 characters long."
msgstr "Das Passwort muss mindestens 6 Zeichen lang sein."

msgid "This username has already been taken"
msgstr "Dieser Benutzername ist schon vergeben"
 

Anscheinend muss man im Model gar nicht die __() Funktion verwenden.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: i18n validation array __()

Beitragvon surtic » Sa 1. Mai 2010, 15:53

wow, dass ist ja super das es dies ganz automatisch macht. Aber komisch, dass das nirgends wo wirklich dokumentiert ist und so viele Leute irgend welche Funktionen schreiben um dies hinzukriegen obwohl es automatisch abgefragt wird.

danke nochmals :) nun kann ich endlich wider weiter arbeiten und massig viele Models mit den nachrichten ausstatten.

mfg reini
Benutzeravatar
surtic
 
Beiträge: 7
Registriert: Di 16. Feb 2010, 14:56
Wohnort: Schweiz
CakePHP-Version: 1.3
OS: Ubuntu

Re: [Gelöst]i18n validation array __()

Beitragvon mbrod » Sa 1. Mai 2010, 16:00

Ja, manches ist bei CakePHP Magie ;)
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: [Gelöst]i18n validation array __()

Beitragvon surtic » Sa 1. Mai 2010, 18:31

Es wird doch nicht Standartmäsig von CakePHP gemacht, sondern wurde durch den Code
Code: Alles auswählen

<?php

/**
 *
 */

class AppModel extends Model {

    /**
     *
     *
     * @param <type> $field
     * @param <type> $value
     */

    function invalidate($field, $value = true)
    {
        parent::invalidate($field, $value);
        $this->validationErrors[$field] = __($value, true);
    }
}
?>


gemacht, habe ich erste bemerkt als ich den "nicht" benötigten Coder gelöscht habe.

gruss reini
Benutzeravatar
surtic
 
Beiträge: 7
Registriert: Di 16. Feb 2010, 14:56
Wohnort: Schweiz
CakePHP-Version: 1.3
OS: Ubuntu

Re: [Gelöst]i18n validation array __()

Beitragvon mbrod » Sa 1. Mai 2010, 18:44

Merkwürdig. Diese Funktion steht bei mir nicht im Model.
mbrod
 
Beiträge: 193
Registriert: Mi 20. Mai 2009, 18:09
Wohnort: Frankfurt am Main
CakePHP-Version: 1.3.8
OS: Mac OS X

Re: [Gelöst]i18n validation array __()

Beitragvon Flo » Sa 1. Mai 2010, 19:45

habs bei mir gerade auchmal testweise Entfernt und ohne den Code funktioniert es nichtmehr...

könnte was mit der Version zu tun haben, ich verwende die 1.3... allerdings steht es im Book sowohl für 1.2 als auch für die 1.3 gleich
1.3: http://book.cakephp.org/view/1230/Local ... in-CakePHP
1.2: http://book.cakephp.org/view/163/Locali ... in-CakePHP
Flo
 
Beiträge: 85
Registriert: Mi 11. Jun 2008, 20:48
Wohnort: Bielefeld
CakePHP-Version: 1.3
OS: Mac OSX 10.6

Nächste

Zurück zu Models

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast