Empfehlungen: Erweiterte Suche

[HILFE] i18l mit cake - step by step

Fragen und Diskussionen zur Installation und Konfiguration von Cake.

[HILFE] i18l mit cake - step by step

Beitragvon Pr0 » Do 29. Apr 2010, 06:35

Hallo Leute!

Bevor ich den kompletten Mechanismus für Multilanguage-Support einbau ( Tutorial von teknoid z.B. ) möchte ich erst einmal "klein" anfangen um alles nachvollziehen zu können. In diesem Beispiel geht es um eine Benutzerregistrierung und dort habe i18l erst einmal bei den Validation-Messages ausprobiert.

Also ich habe bisher folgendes gemacht:

Eine view erstellt:
Code: Alles auswählen
echo $form->create( array( 'action' => 'register' ) );
   
        echo $form->input( 'first_name', array
                                             (
                                                'label' => 'Vorname',
                                                'error' => array( 'empty'  => __( 'empty', true ) )
                                             )
                         );
        echo $form->input( 'last_name', array
                                             (
                                                'label' => 'Nachname',
                                                'error' => array( 'empty'  => __( 'empty', true ) )
                                             )
                         );
        echo $form->input( 'email', array
                                        (
                                            'label' => 'E-Mail',
                                            'error' => array(
                                                                'unique' => __( 'unique', true ),
                                                                'email'  => __( 'email', true )
                                                            )
                                        )
                         );
[...]


Auszug aus meinem User-Model ( bezüglich den Validations-Regeln )
Code: Alles auswählen
[...]
        var $validate = array
                        (
                            'first_name' => array( 'empty' => array( 'rule' => 'notEmpty' ) ),
                            'last_name'  => array( 'empty' => array( 'rule' => 'notEmpty' ) ),
                            'email'      => array
                            (  
                                'email'  => array( 'rule' => 'email' ),
                                'unique' => array( 'rule' => 'isUnique' )
                            ),
[...]


Auszug aus 'htdocs/app/locale/ger/LC_MESSAGES/default.po'
Code: Alles auswählen
[...]

msgid "email"
msgstr "Gültige E-Mail Adresse angeben"

msgid "empty"
msgstr "Bitte trage in dieses Feld ein"

[...]

msgid "unique"
msgstr "Bereits in Benutzung"

[...]


Und zu guter Letzt habe ich in 'htdocs/app/config/bootstrap.php'
folgendes geschrieben
Code: Alles auswählen
Configure::write('Config.language', "ger");



So wenn ich jetzt meine register-Action aufrufe und das Formular so absende, dass die Validation-Messages auftauchen, wird mir immer bloß die msgid bzw der erste Parameter der
Code: Alles auswählen
__(...)

Funktion angezeigt. ( Auch wenn ich statt der bootstrap.php die core.php direkt editiere ) :?

Was habe ich übersehen??? :?:
Pr0
 
Beiträge: 2
Registriert: Do 29. Apr 2010, 06:00

Re: [HILFE] i18l mit cake - step by step

Beitragvon mbrod » Fr 30. Apr 2010, 08:45

Ich habe im Grunde die gleiche Aufgabe und gebe einfach mal den Code wieder, wie er bei mir funktioniert.
add.ctp:
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),'error'=>__('Password must be at least 6 characters long.',true)));
        echo $form->input('email');
        echo $form->input('group');
    ?>
    </fieldset>
<?php echo $form->end(__('Submit',true));?>
 

user.php:
Code: Alles auswählen
class User extends AppModel {

    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)
            )
        ),
        'email' => array(
            'rule' => array('email')
        )
    );

}
 

Und Auszug app/locale/deu/LC_MESSAGES/default.po'
Code: Alles auswählen
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"
 


Dabei ist mir aufgefallen, dass Du app/locale/ger benutzt, bei mir ist es aber app/locale/deu.
Wahrscheinlich ist dies sogar der Fehler.
Aber noch eine Besonderheit die mir mit dem Editor Poedit und CakePHP aufgefallen ist. Öffnet man die default.po mit Poedit, so wird beim Sichern der Datei von Poedit auch default.mo erzeugt. CakePHP greift dann auf default.mo zu. Ändert man nun default.po mit einem anderen Editor, so werden diese Änderungen von CakePHP nicht wahrgenommen, da auf die komprimierte Datei default.mo zugegriffen wird.
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: [HILFE] i18l mit cake - step by step

Beitragvon Pr0 » Sa 1. Mai 2010, 16:19

Tatsache das mit "deu" stimmt!!! Tausend Dank!!

also erstelle und editiere die .po-Daten mit Wordpad und brauch dazu irgendwie keine .mo datei
Pr0
 
Beiträge: 2
Registriert: Do 29. Apr 2010, 06:00


Zurück zu Installation und Konfiguration

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste