turk porno porno escort rokettube
Ergebnis 1 bis 14 von 14

Thema: Flash Messenger - Übersetzung

  1. #1
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard Flash Messenger - Übersetzung

    Hallo zusammen,

    Ich nutze das FlashMessenger plugin bereits um Nachrichten (erfolgreich, nicht erfolgreich) anzuzeigen. Zum Beispiel nach einem Loggin.

    Was mir jedoch noch Probleme bereitet, ist die Übersetzung der Nachrichten, die ich dem FlashMessenger zuweise und auf der jeweils nächten aufzurufenden Seite anzeige.

    Kannst ihr mir einen Lösungsweg verraten, wie ich das bewerkstelligen kann? Vielleicht hast auch jemand einen Link dazu für mich. Ich habe schon wirklich viel im Netz gesucht, jedoch keine Lösung gefunden.
    Bisher dachte ich, das ich die Messages einfach über translate() übersetzen kann und dann meine übersetzten Strings in den jeweiligen PO-Sprachfiles hinterlege. So wie ich auch statischen Text in der View übersetze.

    Ist das der richtige Weg, oder liege ich da völlig falsch?

    Gruss Thomas

  2. #2
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von thenouse Beitrag anzeigen
    Ich habe schon wirklich viel im Netz gesucht, jedoch keine Lösung gefunden.
    Warum schaust du nicht einfach auf deine Festplatte oder nutzt deine IDE? Die Lösung liegt damit direkt vor dir.


    Zitat Zitat von thenouse Beitrag anzeigen
    Bisher dachte ich, das ich die Messages einfach über translate() übersetzen kann und dann meine übersetzten Strings in den jeweiligen PO-Sprachfiles hinterlege. So wie ich auch statischen Text in der View übersetze.
    Alles überflüssig!

    Da der „FlashMessenger“-Helfer die Klasse „Zend\I18n\View\Helper \AbstractTranslatorHelper“ verwendet, stehen dir die Methoden „setTranslator“ und „setTranslatorTextDomain“ zur Verfügung. Mehr brauchst du nicht.

    (Im Netz findest du natürlich auch diese Angaben.)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  3. #3
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    Hi Kai,


    Vielleicht habe ich da noch eine Verständnislücke.
    Also ich habe bisher das FlashMessenger Controller Plugin genutzt um in einer Action entsprechend Nachrichten zu setzten...

    Dann übergebe ich im Controller (falls es Messages gibt) die Messgages per return['messages'] an die View. Ich verstehe nun nicht ganz, wie die Nachricht, die ich auf English im Controller gesetzt habe nun übersetze, sofern zb. meine Locale-Variable "de" ist. Ich kann wie du oben erwähnt hast, den Translator setzen. Aber wie kann ich denn nun einfach meinem Translator (oder dem FlashMessenger?) sagen welches File er nun für die Message zur übersetzung nehmen soll?

    Ich erstehe das ehrlich gesagt noch nicht so ganz. Bei den Texten, die ich in der View übersetze, habe ich das Schlüsselwort translate. Über einen PO-Files Editor lese ich nun die view files ein und sage dem Editor, das alle string die zuvor das transalte Schlüsselwort besitzen, erkennt werden sollen, damit ich die èbersetzungen vornehmen kann.

    Wie mache ich das nun aber mit den Messages im Flashmessenger? Genauer mit den Messages, die im return array in der "messages" variable stehen?

    Gruss Thomas

  4. #4
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von thenouse Beitrag anzeigen
    Aber wie kann ich denn nun einfach meinem Translator (oder dem FlashMessenger?) sagen welches File er nun für die Message zur übersetzung nehmen soll?
    Per „setTranslatorTextDomain“.

    Zitat Zitat von thenouse Beitrag anzeigen
    Bei den Texten, die ich in der View übersetze, habe ich das Schlüsselwort translate.
    Du musst nicht extra „translate“ aufrufen, dass macht der „FlashMessenger“ von ganz alleine.

    Die Schlüsselworte werden als Nachrichten dem „FlashMessenger“-Kontroller-Plugin übergeben. Dann übergibst du den Translator an den „FlashMessenger“-View-Helfer und sagst noch, per „setTranslatorTextDomain“, wo dieser suchen muss.

    Zitat Zitat von thenouse Beitrag anzeigen
    Genauer mit den Messages, die im return array in der "messages" variable stehen?
    Du musst nicht alles selber lösen, ansonsten bräuchtest du auch kein Framework. Die Funktionalität der Übersetzung ist bereits durch die Klasse „Zend\I18n\View\Helper \AbstractTranslatorHelper“ vorhanden.
    Geändert von Kaiuwe (09.01.2014 um 11:05 Uhr)
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  5. #5
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    Hi Kai, vielen Dank für deine Antwort.

    Ich habe das auch so versucht. Leider ohne Erfolg. Ich zeige dir und den anderen mal ein paar Codeausschnitte, vielleicht sieht der ein oder andere ja meinen Denk-Fehler.

    In einem Controller in einer Action setzte ich die messages:

    PHP-Code:
    // \Zend\Mvc\Controller\Plugin\FlashMessenger
    $this->flashMessenger()->addMessage(
                        
    'Hello from Test'
                
    ); 
    danach wird eine Action eines anderern Controllers aufgerufen und die Messages an die View übergeben:

    PHP-Code:
    $viewmodel->setVariable('messages'$this->flashMessenger()->getMessages()); 
    In der View mache ich dann folgendes:

    PHP-Code:
    $translator = new Zend\I18n\Translator\Translator();


    <?php $translator->addTranslationFile('phparray',
                 
    './module/TestModule/language/de_DE.php')?>
    // zum Testen
    <?php echo $translator->translate('Hello From Test'__NAMESPACE__)?>
    <?php $this
    ->flashmessenger()->setTranslator($translator)?>

    <?php foreach ($this->messages as $message): ?>

    <div class="alert alert-login">
    <button class="close" type="button" data-dismiss="alert">×</button>
    <?php echo $message?>

    </div>
    <?php endforeach ?>
    Leider komme ich damit nicht weiter, da der Text nicht übersetzt wird. Das TestModule besitzt den Ordner "language" und das File "de_DE.php"

    das "de_DE.php"-File sieht folgendermassen aus:

    PHP-Code:
    return array(
        
    "Hello From Test" => 'Hallo vom Test'
    ); 


    Gruss Thomas

  6. #6
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von thenouse Beitrag anzeigen
    danach wird eine Action eines anderern Controllers aufgerufen und die Messages an die View übergeben:
    Wieso mehrere Kontroller-Aktionen???

    Zitat Zitat von thenouse Beitrag anzeigen
    PHP-Code:
    $viewmodel->setVariable('messages'$this->flashMessenger()->getMessages()); 
    Wenn du die „FlashMessenger“-Nachrichten selbst weitergibst, dann raubst du die Daseinsberechtigung für den „FlashMessenger“.

    Du musst nichts übergeben, sondern einfach nur im View-Skript eine Ausgabe machen:
    PHP-Code:
    echo $this->flashMessenger()->render(); 
    Ansonsten bräuchtest du gar nicht den „FlashMessenger“.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  7. #7
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    Hi Kai,

    zwei Aktionen, weil ich von der einen zur anderen navigiere, zwei Dinge überprüfe und falls diese nicht vorhanden sind, gehts zurück zur ersten Aktion und die view wird angezeigt mit entsprechender Fehlermeldung. (hier ist kein Formular oder ähnliches vorhaden...)

    Ich habe meinen Code nun so angepasst und die Fehlermeldung(en) wird (werden) auch ausgeben. Jedoch immernoch nur auf Englisch.

    nochmals der Code in der View:

    $translator = new Zend\I18n\Translator\Translator();
    <?php $translator->addTranslationFile('phparray',
    './module/SurveyMedia/language/de_DE.php')?>
    <?php $this->flashmessenger()->setTranslator($translator) ?>
    <?php echo $this->flashMessenger()->render(); ?>
    Und der Fehler:
    Zend\I18n\Exception\InvalidArgumentException

    Expected an array, but received integer
    Das passiert beim Aufruf der render()-Methode des flashmessenger-plugins.

    liegt das an meinen Sprachfiles oder an etwas anderem?

  8. #8
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Zitat Zitat von thenouse Beitrag anzeigen
    zwei Aktionen, weil ich von der einen zur anderen navigiere, zwei Dinge überprüfe und falls diese nicht vorhanden sind, gehts zurück zur ersten Aktion und die view wird angezeigt mit entsprechender Fehlermeldung. (hier ist kein Formular oder ähnliches vorhaden...)
    Führe die Prüfung direkt in der entsprechenden Aktion aus oder überhaupt nicht im Kontroller, dann musst du auch nicht von Aktion zu Aktion springen. Denn das ist (in der Regel) immer überflüssig oder gar falsch.

    Zitat Zitat von thenouse Beitrag anzeigen
    Und der Fehler:
    Zend\I18n\Exception\InvalidArgumentException
    Wo ist der Stack-Trace?
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  9. #9
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    Hi,

    der Stack-Trace:

    #0 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\I18n\Translator\Transla tor.php(698): Zend\I18n\Translator\Loader\PhpArray->load('en_US', './module/TestModule...')
    #1 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\I18n\Translator\Transla tor.php(570): Zend\I18n\Translator\Translator->loadMessagesFromFiles('default', 'en_US')
    #2 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\I18n\Translator\Transla tor.php(438): Zend\I18n\Translator\Translator->loadMessages('default', 'en_US')
    #3 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\I18n\Translator\Transla tor.php(354): Zend\I18n\Translator\Translator->getTranslatedMessage('Hello From Test', 'en_US', 'default')
    #4 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\View\Helper\FlashMessen ger.php(129): Zend\I18n\Translator\Translator->translate('Hello From Test', 'default')
    #5 [internal function]: Zend\View\Helper\FlashMessenger->Zend\View\Helper\{closure}('You need to add...', 0)
    #6 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\View\Helper\FlashMessen ger.php(132): array_walk_recursive(Array, Object(Closure))
    #7 C:\xampp\htdocs\test_sprache\module\TestModule\vie w\test-module\test-module\index.phtml(37): Zend\View\Helper\FlashMessenger->render()
    #8 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\View\Renderer\PhpRender er.php(507): include('C:\xampp\htdocs...')
    #9 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\View\View.php(205): Zend\View\Renderer\PhpRenderer->render(Object(Zend\View\Model\ViewModel))
    #10 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\View\View.php(233): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
    #11 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\View\View.php(198): Zend\View\View->renderChildren(Object(Zend\View\Model\ViewModel ))
    #12 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\Mvc\View\Http\DefaultRe nderingStrategy.php(102): Zend\View\View->render(Object(Zend\View\Model\ViewModel))
    #13 [internal function]: Zend\Mvc\View\Http\DefaultRenderingStrategy->render(Object(Zend\Mvc\MvcEvent))
    #14 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\EventManager\EventManag er.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
    #15 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\EventManager\EventManag er.php(207): Zend\EventManager\EventManager->triggerListeners('render', Object(Zend\Mvc\MvcEvent), Array)
    #16 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\Mvc\Application.php(347 ): Zend\EventManager\EventManager->trigger('render', Object(Zend\Mvc\MvcEvent))
    #17 C:\xampp\htdocs\test_sprache\vendor\zendframework\ zendframework\library\Zend\Mvc\Application.php(322 ): Zend\Mvc\Application->completeRequest(Object(Zend\Mvc\MvcEvent))
    #18 C:\xampp\htdocs\test_sprache\public\index.php(15): Zend\Mvc\Application->run()
    #19 {main}

  10. #10
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Die Datei kann nicht geladen werden.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  11. The Following User Says Thank You to Kaiuwe For This Useful Post:

    thenouse (09.01.2014)

  12. #11
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    okay. Dann werde ich mal nachsehen wo sich der Schreibfehler versteckt. Vielen Dank schonmal soweit für deine Hilfe

  13. #12
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    Okay, ich habe den Fehler gefunden. Ich hatte vergessen im Sprachfile die PHP-Tags zu setzen.

    Vielen Dank Kai, hast mir wirklich sehr geholfen!

  14. #13
    Super-Moderator Avatar von Kaiuwe
    Registriert seit
    30.12.2006
    Beiträge
    5.520
    Thanks
    4
    Thanked 356 Times in 287 Posts

    Standard

    Auch wenn es bereits läuft, solltest du die Erzeugung des Translators und die Zuweisung der Übersetzungsdatei nicht im View-Skript ausführen.
    Zitat Zitat von thenouse Beitrag anzeigen
    PHP-Code:
    <?php
    $translator 
    = new Zend\I18n\Translator\Translator();
    $translator->addTranslationFile('phparray',
    './module/SurveyMedia/language/de_DE.php')?>
    <?php $this
    ->flashmessenger()->setTranslator($translator?>
    Mal ein schnelles Beispiel für eine Modul-Klasse:
    PHP-Code:
    namespace Foo;

    use 
    Zend\ModuleManager\Feature\ViewHelperProviderInterface;

    class 
    Module implements ViewHelperProviderInterface
    {
       
    /**
         * Expected to return \Zend\ServiceManager\Config object or array to
         * seed such an object.
         *
         * @return array|\Zend\ServiceManager\Config
         */
        
    public function getViewHelperConfig()
        {
            return array(
                
    'factories' => array(
                    
    'flashMessenger' => function ($sm) {
                        
    $helper = new FlashMessenger();

                        
    // Formatierung für die Ausgabe
                        
    $helper->setMessageOpenFormat('<p%s>');
                        
    $helper->setMessageCloseString('</p>');
                        
    $helper->setMessageSeparatorString('<br>');

                        


                        
    // Translator setzen
                        
    $helper->setTranslator($translator);

                        return 
    $helper;
                    },
                ),
            );
        }

    Oder du erstellst eine eigene „Factory“-Klasse um den Helfer zu erzeugen.
    Zum Zend Framework stehen jedem folgende Quellen zum Nachschlagen zur Verfügung:

  15. The Following User Says Thank You to Kaiuwe For This Useful Post:

    thenouse (09.01.2014)

  16. #14
    Benutzer
    Registriert seit
    18.06.2013
    Beiträge
    39
    Thanks
    3
    Thanked 0 Times in 0 Posts

    Standard

    Hallo Kai,
    vielen Dank für deinen weiteren Hinweis. Ich werde mich daran halten. Dazu hätte ich nun jedoch noch eine Frage, wenn ich nun mehrere Sprach-Files habe, dann müsste ich diese ja theoretisch alle einzeln über addTranslationFile() hinzufügen. Sehe ich es richtig, das ich mit

    'translation_file_patterns' => array (
    array (
    'type' => 'gettext',
    'base_dir' => __DIR__ . '/../language',
    'pattern' => '%s.mo',
    'text_domain' => __NAMESPACE__
    )
    nur noch auf dem Translator die Locale dynamisch setzen muss um entsprechend die Übersetzungen zu erhalten?

    //EDIT: weiter hätte ich noch die Frage, wie ich eine Nachricht dem FlashMessenger hinzufügen kann, in welcher ein Teil der Nachricht später durch eine Variable ersetzt werden soll?
    Beispiel: ("Der Benutzername %xy% wird bereits verwendet")
    In meinem Controller würde das nun so aussehen:
    $this->flashMessenger ()->addMessage ( 'Der Benutzername ''' . $user->getUsername() . '" wird bereits verwendet' );

    das kann ja aber nicht funktionieren. Jedoch komme ich auch nicht drauf wie es funktionieren kann.

    In den Übersetzungsdateien von Zend für zb. Zend_Validate habe ich gesehen, das die Strings so aufgebaut sind (daher auch mein Beispiel oben):

    "The input is not between '%min%' and '%max%', inclusively" => "Der Eingabewert ist nicht zwischen '%min%' und '%max%', inklusive diesen Werten",

    Hat mir hier jemand nochmals ein wenig Hilfe?


    Gruss Thomas
    Geändert von thenouse (09.01.2014 um 16:27 Uhr)

Ähnliche Themen

  1. Zend_Auth und Flash / Flex
    Von PinoPinelli im Forum Auth
    Antworten: 4
    Letzter Beitrag: 24.09.2010, 00:39
  2. Flash in Dojo Lightbox
    Von anno im Forum Javascript + RIA
    Antworten: 1
    Letzter Beitrag: 11.01.2010, 20:56
  3. XML an Flash übergeben
    Von anno im Forum Einsteigerfragen
    Antworten: 5
    Letzter Beitrag: 11.12.2009, 19:05
  4. Flash-Helper
    Von Innocentus im Forum Einsteigerfragen
    Antworten: 8
    Letzter Beitrag: 02.04.2009, 01:34
  5. wie Flash in Zend einbinden
    Von avocadosystems im Forum Einsteigerfragen
    Antworten: 0
    Letzter Beitrag: 09.03.2009, 18:21

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •