Jörg Reinholz: arry vergleichen und fehlende Werte anzeigen

Beitrag lesen

Moin!

So. Hier das Testskript ohne Syntaxfehler:

<?php
error_reporting(E_ALL);

echo translate('Stadt', 'englisch'), '<br>';
echo translate('Strasse', 'englisch'), '<br>';
echo translate('Strasse', 'englisch', E_USER_NOTICE), '<br>';
echo translate('Strasse', 'englisch', E_USER_ERROR), '<br>';


function translate($s, $lang="deutsch", $errorIfNotFound='config') {
    # schneller Rückweg wenn deutsch
    if ('deutsch' == $lang) {
      return $s;
    }
### Konfiguration ####
    if (! defined ('translationsDir') ) {
       define ('translationsDir', '/var/www/lib/translations/');
    }

    if ('config' !== $errorIfNotFound) {
      define ('errorIfNotFound', $errorIfNotFound);
    } else {
      # Eine von diesen Reaktionen auf Fehler auswählen:
      define ('errorIfNotFound', false);
      #define ('errorIfNotFound', E_USER_ERROR);
      #define ('errorIfNotFound', E_USER_NOTICE);
   }
### / Konfiguration ####

    if (! is_file (translationsDir.$lang) ) {
        if ( false !== errorIfNotFound )  {
          trigger_error ('Die Datei ' . translationsDir.$lang . ' gibt es nicht!' ,errorIfNotFound);
        } else {
            return $s;
        }
    } elseif (! is_readable (translationsDir.$lang) ) {
        if ( false !== errorIfNotFound )  {
          trigger_error ('Die Datei ' . translationsDir.$lang . ' ist nicht lesbar (Rechte?)' ,errorIfNotFound);
        } else {
            return $s;
        }
    }
    require_once(translationsDir.$lang); # triggert immer einen Error

    # Ab hier existiert der Hash mit $_lang['string'] ='übersetzung'

    if (! isset ($_lang[$s]) ) {
       if ( false !== errorIfNotFound )  {
          trigger_error ('Die Übersetzung für "' . $s . '" ist in der Datei ' . translationsDir.$lang . ' nicht angelegt.' ,errorIfNotFound);
       } else {
            return $s;
       }
    }

    if ('config' !== $errorIfNotFound) {
      define ('errorIfNotFound', $errorIfNotFound);
    } else {
      # Eine von diesen Reaktionen auf Fehler auswählen:
      define ('errorIfNotFound', false);
      #define ('errorIfNotFound', E_USER_ERROR);
      #define ('errorIfNotFound', E_USER_NOTICE);
   }
### / Konfiguration ####

    if (! is_file (translationsDir.$lang) ) {
        if ( false !== errorIfNotFound )  {
          trigger_error ('Die Datei ' . translationsDir.$lang . ' gibt es nicht!' ,errorIfNotFound);
        } else {
            return $s;
        }
    } elseif (! is_readable (translationsDir.$lang) ) {
        if ( false !== errorIfNotFound )  {
          trigger_error ('Die Datei ' . translationsDir.$lang . ' ist nicht lesbar (Rechte?)' ,errorIfNotFound);
        } else {
            return $s;
        }
    }
    require_once(translationsDir.$lang); # triggert immer einen Error

    # Ab hier existiert der Hash mit $_lang['string'] ='übersetzung'

    if (! isset ($_lang[$s]) ) {
       if ( false !== errorIfNotFound )  {
          trigger_error ('Die Übersetzung für "' . $s . '" ist in der Datei ' . translationsDir.$lang . ' nicht angelegt.' ,errorIfNotFound);
       } else {
            return $s;
       }
    }
    return $_lang[$s];
}

Jörg Reinholz