In einer externen Datei nach einer Variablen suchen

Miami Beach

Grünschnabel
Hallo,
ich würde gerne eine Funktion erstellen, die überprüft ob eine Variable in einer includeten Datei enthalten ist. Damit will ich sicher gehen, dass keine Variable in einer Sprachdatei fehlt, deswegen nicht ausgegeben werden kann und somit ein leeres Feld da steht.

Bisher habe ich es so in der Art:

PHP:
<?php

# Sprachdateien einfügen
if( $_GET['lang'] == 'de' )     { include("lang/de.php"); }
elseif( $_GET['lang'] == 'nl' ) { include("lang/nl.php"); }
elseif( $_GET['lang'] == 'ru' ) { include("lang/ru.php"); }
else                            { include("lang/en.php"); }



?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <title>Sprachen</title>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="description" content="" />
    <meta name="author" content="" />
    <meta name="keywords" content="" />

</head>

<body>

<?php

if( $text ) { echo $text; }
else { echo 'Variable nicht gegeben.'; }

?>


</body>
</html>

Ich bräuchte nur eine Lösung für eine Funktion, da ich nicht immer und immer wieder bei jeder Ausgabe eines Textes diese if-Abfrage stellen muss.

Einfach wäre eine Funktion wie "translate($text)", in dieser werden die Sprachdateien includet und nach der Variable gesucht. Falls sie da ist, wird der Inhalt ausgegeben. Falls die Variable fehlt sollte eine Ausgabe geschehen und mich darüber Informieren, wenn ich die Dateo öffne: "Variable ist in der Sprachdatei nicht eingetragen".

Ich bedanke mich schonmal im Voraus, Danke! :)
 
Hi,

wenn du eine Verwaltung für Sprachdateien in PHP erstellen willst: Es gibt ein Tool zur Verwaltung von Sprachdateien, es nennt sich Online Translation Center (oder kurz oTranCe bzw ganz kurz OTC). Diese Software ist kostenlos und unter http://otrance.org/ zu finden.

Ansonsten hilft dir die PHP-Funktion get_defined_vars weiter.

Gruß Kyoya Stefan
 
Zuletzt bearbeitet:
Danke für die schnelle Antwort und den Tip, das ist aber nicht ganz das was ich suche, bzw. es hilft so mir so nicht weiter.

Ich möchte über eine Funktion:

PHP:
function translate($variable)

Überprüfen, ob diese Datei in dieser Funktion gegeben ist:

PHP:
function translate($variable) {

    # Sprachdateien einfügen
    if( $_GET['lang'] == 'de' )     { include("lang/de.php"); }
    elseif( $_GET['lang'] == 'nl' ) { include("lang/nl.php"); }
    elseif( $_GET['lang'] == 'ru' ) { include("lang/ru.php"); }
    else                            { include("lang/en.php"); }

    # Wie hier die Variable heraussuchen?!

    if( !$variable )
    {
        echo 'Sprachvariable nicht definiert!';
    }
    else
    {
        echo $variable;
    }

}

Hoffe ich habe das jetzt etwas genauer geschildert.
 
Ahh du willst also einen Translation Adapter basteln. Da empfehle ich dir als erstes Arrays in den Sprachdateien zu nutzen. Dann kannst du mit isset prüfen ob ein Schlüssel existiert.
PHP:
class Translator
{
    private $languageVars;
    
    public function __construct($languageFile)
    {
        if (!file_exists($languagefile)) {
            throw new Exception("Language file '$languageFile' doesn't exist!");
        }
        $this->languageVars = include($this->languageFile);
    }
    
    public function translate($key)
    {
        if (isset($this->languageVars[$key])) {
            return $this->languageVars[$key];
        }
        
        return $key;
    }
}

Gruß Kyoya Stefan
 
Habe die Lösung schon gefunden, danke trotzdem für die schnelle Antwort!
Damit ihr auch was davon habt, so hatte ich es mir gedacht, so ist die Lösung:

PHP:
<?php

function translate($variable) {


    # Sprachdateien einfügen
    if( $_GET['lang'] == 'de' )     { include("lang/de.php"); }
    elseif( $_GET['lang'] == 'nl' ) { include("lang/nl.php"); }
    elseif( $_GET['lang'] == 'ru' ) { include("lang/ru.php"); }
    else                            { include("lang/en.php"); }

    # Wie hier die Variable heraussuchen?!

    if( !$$variable )
    {
        echo '<font color="#FF0000">[Sprachvariable nicht definiert] = [' . $variable . ']</font>';
    }
    else
    {
        echo $$variable;
    }

}


?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <title>Sprachen</title>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="description" content="" />
    <meta name="author" content="" />
    <meta name="keywords" content="" />

</head>

<body>

<?php translate('text'); ?> <?php translate('denis'); ?>


</body>
</html>


So dementsprechend die de.php

PHP:
<?php

    $text = 'Das ist der Inhalt dieser Seite.';
    $denis = 'hi';

?>

So dementsprechend die en.php

PHP:
<?php

    $text = 'This is the content of this site.';
    $denis = 'hi';

?>

So dementsprechend die nl.php

PHP:
<?php

?>

So dementsprechend die ru.php

PHP:
<?php

    $text = '??????????????';

?>


MfG Miami
 
Zuletzt bearbeitet:
Warum prüfst du nicht einfach ob die Variable gesetzt ist?

PHP:
if(isset($variable) && !empty($variable)){
     // variable existiert und inhalt ist vorhanden
}else{
    // existiert nicht 
}
 
Das tut die Funktion doch bereits schon mit:

PHP:
if( !$$variable )
    {
        echo '<font color="#FF0000">[Sprachvariable nicht definiert] = [' . $variable . ']</font>';
    }
    else
    {
        echo $$variable;
    }

oder woran unterscheidet sich meine Abfrag von der, die du hier vorgeschlagen hast?
 

Neue Beiträge

Zurück