Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP und gettext (Kann Sprache nicht wechseln)

Einklappen

Neue Werbung 2019

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

  • PHP und gettext (Kann Sprache nicht wechseln)

    Hallo zusammen

    mittlerweile habe ich es hinbekommen mit gettext ein paar Texte auf meine Seite zu zaubern.
    Allerdings nur in de_DE alles andere wird scheinbar nicht erkannt.
    Soll heissen bei allen anderen Sprachen liefert mir php nur die msgid als Ausgabe.

    Das angesprochene Verzeichnis und Datei scheinen korrekt zu sein.
    Zumindest wird jeweils die korrekte Datei erstellt.

    Hier mal mein Code, wie ich gettext benutze:

    Code:
    <?php
    // settings you may want to change
    $locale = "de_CH";  // the locale you want
    if ($_GET) 
    {
    	if ($_GET['lang'] == 'en') $locale = "en_US";
    	else $locale = "de_DE";
    }
    header("Content-language: $locale");
    
    $locales_root = "locale";  // locales directory
    $domain = "messages"; // the domain you're using, this is the .PO/.MO file name without the extension
    
    // activate the locale setting
    setlocale(LC_ALL, $locale);
    setlocale(LC_TIME, $locale);
    putenv("LC_ALL=$locale");
    // path to the .MO file that we should monitor
    $filename = "$locales_root/$locale/LC_MESSAGES/$domain.mo";
    $mtime = filemtime($filename); // check its modification time
    // our new unique .MO file
    $filename_new = "$locales_root/$locale/LC_MESSAGES/{$domain}_{$mtime}.mo"; 
    
    if (!file_exists($filename_new)) {
     
        //clean up the old mo file before copying the new one
        $current_dir = dirname($filename_new);
        $dir = scandir($current_dir);
        foreach ($dir as $file) {
            if (in_array($file, array("$domain.mo","$domain.po",".",".."))) continue;
            unlink($current_dir.'/'.$file);
        }
     
        copy($filename, $filename_new);
    }
    // compute the new domain name
    $domain_new = "{$domain}_{$mtime}";
    // bind it
    bindtextdomain($domain_new,$locales_root);
    // then activate it
    textdomain($domain_new);
    // all done
    
    
    
     
    
    echo $domain_new."<br>";
    echo "$locale<br><br>"._("HELLO_WORLD")."<br>";
    
    echo _("Body")."<br>";
    
    echo gettext('This is an example text'); ?>
    Wer sich das ganze online anschauen will darf auch gern auf http://airfieldmanager-game.de/test.php?lang=de selber nachschauen.

    Auf dem Server liegt neben der deutschen Datei auch noch eine englische.
    Wenn ich den Dateiname nicht dynamisch vergebe bekomme ich zwar nicht mehr die msgid, dafür aber permanent die deutsche Übersetzung gezeigt.

    Falls das noch relevant ist, der Hoster ist Lima-City.

    Jemand eine Idee wo ich noch schauen kann, was da bei mir schief läuft?

  • #2
    Wenn die erste if-Bedingung nicht erfüllt ist, dann ist Dein Content-language doch nach wie vor de-CH, richtig?

    Kommentar


    • #3
      Ja, das ist korrekt.

      Die Variable stellt korrekt auf en_US um, wenn ich den Get Parameter übergib - aber der Inhalt der englischen Sprachdatei wird scheinbar nicht korrekt geladen.


      Mittlerweile bin ich aber von gettext weg geangen und benutze ein array, welches ich je nach Sprache aus einer Datei einlese.

      Kommentar

      Lädt...
      X