Mehrsprachigkeit

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    OK, nochmal:

    index.tpl
    Code:
    {do x times}
    <p>
      {translate}hello_world{/translate}
      Aufruf-Nummer: $x
      <img src="/images/pic.jpg" />
    </p>
    {enddo}
    Funktion translate:
    PHP-Code:
    function translate($what) {
      
    $words fetch_language($_SESSION['lang']);
      return isset(
    $words[$what]) ? $words[$what] : '';

    index.php
    PHP-Code:
    $tpl->add_filter('translate');
    echo 
    $tpl->fetch('index.tpl'$_SESSION['lang']); 
    $tpl->fetch
    PHP-Code:
    function fetch($tpl$lang) {
      
    $compiled $this->get_compiled($tpl$lang);
      if (!
    file_exists($compiled['name'])) {
        
    $tpl->compile($tpl$compiled['name']);
      }
      include_once 
    $compiled['name'];
      return 
    $compiled['func']($this->data);

    $tpl->compile
    PHP-Code:
    function compile($tpl$compiled) {
      
    $content file_get_contents($tpl);
      
    $this->run_filters($content);
      
    //hier wird weiter geparsed
      //und dann gespeichert

    Beispiel 1: $_SESSION['lang'] = de

    fetch:
    $compiled = index.tpl.de.php -> existiert noch nicht

    compile:
    $content
    Code:
    {do x times}
    <p>
      {translate}hello_world{/translate}
      Aufruf-Nummer: $x
      <img src="/images/pic.jpg" />
    </p>
    {enddo}
    run_filters
    $content
    Code:
    {do x times}
    <p>
      Hallo Welt
      Aufruf-Nummer: $x
      <img src="/images/pic.jpg" />
    </p>
    {enddo}
    weiter parsen
    $content
    PHP-Code:
    function index_tpl_de_php($data) {
      
    $output '';
      for (
    $i 1$i <= $data['x']; $i++) {
        
    $output .= '<p>
      Hallo Welt
      Aufruf-Nummer: '
    .$i.'
      <img src="/images/pic.jpg" />
    </p>'
    ;
      }
      return 
    $output;

    Beispiel 2: $_SESSION['lang'] = en

    fetch:
    $compiled = index.tpl.en.php -> existiert noch nicht

    compile:
    $content
    Code:
    {do x times}
    <p>
      {translate}hello_world{/translate}
      Aufruf-Nummer: $x
      <img src="/images/pic.jpg" />
    </p>
    {enddo}
    run_filters
    $content
    Code:
    {do x times}
    <p>
      Hello world
      Aufruf-Nummer: $x
      <img src="/images/pic.jpg" />
    </p>
    {enddo}
    weiter parsen
    $content
    PHP-Code:
    function index_tpl_de_php($data) {
      
    $output '';
      for (
    $i 1$i <= $data['x']; $i++) {
        
    $output .= '<p>
      Hello world
      Aufruf-Nummer: '
    .$i.'
      <img src="/images/pic.jpg" />
    </p>'
    ;
      }
      return 
    $output;

    Noch Fragen?

    Was du mit deiner letzten Frage meinst, verstehe ich nicht so ganz
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #17
      Vielen Dank erst einmal für dieses ausführliche Post von dir. Fragen habe ich erst einmal keine mehr

      Dennoch möchte ich meine Frage vom letzten Post etwas ausführlicher erläutern. Dazu möchte ich kurz meine Problematik darstellen:

      Ich programmiere eine Kartenanwendung. In meiner map.php sind Texte einfach in HTML vorhanden ( <p>bla</p> ); zur Darstellung der Karte und zur Interaktion damit habe ich eine Klasse erstellt. Je nach Art der Interaktion kann von der Klasse eine inhaltliche Rückmeldung erfolgen. Als einfaches Beispiel sind das z.B. Tabellenüberschriften von Abfrageergebnissen oder auch Fehlermeldungen. Somit habe ich zwei Quellen von Texten in meiner map.php, einmal aus der Datei selber aber auch aus meiner Klasse.

      Wie ich mit den Texten, die direkt in der map.php stehen, vorgehen kann, ist mir nun klar.
      Aber wie der dynamische Teil in meiner map.php, der sich bei jedem Aufruf ändern kann und der aus der Klasse herrührt zu behandeln ist, war / bzw. ist mir noch nicht ganz klar. Denn schließlich lässt sich diese Ausgabe nicht in einer *.tpl speichern. Und falls doch, weiss ich nicht wie. Hier rührte auch meine Idee von ein paar Posts her, PHP die Ausgaben mittels Outputbuffering zu puffern und dann die Tokens zu suchen und den Text ersetzen zu lassen. Da gibt es kein Problem mit dynamisch eingebundenen Inhalten.

      Zur Lösung dieses Problems ohne Outputbuffering zu verwenden hatte ich bisher eine lokalisierte Klasse vorgesehen. Die Rückgabewerte der Klasse wären schon in der richtigen Sprache und müssten nicht mehr übersetzt werden.

      Bevor ich hier noch weiter herumphilosofiere und alles noch unklarer mache, denke ich erst einmal über deine Beispiele nach und melde mich erst nach reiflicher Überlegung wieder.
      Ich wollte aber auf jedenfall schon mal eine Rückmeldung auf dein Post geben
      Zuletzt geändert von frabron; 16.08.2005, 16:16.

      Kommentar

      Lädt...
      X