Was ist __( ) für eine Translations-Funktion?
MB
- html
- php
- sprache
moin,
ich habe diese funktion __()
schon in Tutorials gesehen ohne "Standart" Frameworks wie Wordpress oder CakePHP.
Der Tutor hat diese Funktion verwendet um Texte in andere Sprachen umzuwanden. Zuerst hat er den Source fest gelegt z.B. de.php
:
return [
'test' => 'Beispieltext'
];
Hier die Übersetzer Klasse Lang.class.php
:
<?php
class Lang {
protected static $data;
public function load( string $lang_code ) {
$lang_file_path = ROOT . DS . 'lang' . DS . strtolower( $lang_code ) . '.php';
if( file_exists( $lang_file_path ) ) {
self::$data = include( $lang_file_path );
} else {
throw new Exception( 'lang file not found: ' . $lang_file_path );
}
}
public static function get( string $key, string $default_value ) : string {
return isset( self::$data[ strtolower( $key ) ] )
? self::$data[ strtolower( $key ) ]
: $default_value;
}
}
Er hat diese Klasse in einer App aufgerufen Lang::load( 'de' );
und im HTML-Code intern den PHP-Code ausgegeben mit <?=__( 'lng.test' )?>
Ich habe keinen blassen schimmer wie im HTML-Code __( 'test' )
da Beispieltext
raus gekommen ist. Natürlich ghabe ich es auch versucht ging aber sehr schief
Fatal error: Uncaught Error: Call to undefined function __()
Auch all ich den Code vom Tutor auf das minimalste reduziert habe klappts auch nicht 😕. Erst als ich dann die Namespaces hinter den eigentliche Klasse geschrieben habe und die Methode get mit diesem Parameter 'test' aufgerufen habe funktioniert es wie erwartet.
Was hat das mit dere Funktion __( )
aufsich? Ist das von PHP vordefinierte Funktion? Wie kann man diese Funktion richtig nutzen?
lg
Hallo MB,
hier ist was oberfaul.
Lang::load sollte eine statische Methode aufrufen, aber diese Methode ist nicht statisch implementiert.
Methoden mit __ Präfix sind von PHP reserviert, für „magic methods“, aber eine von PHP implementierte __ Methode gibt's in der Doku nicht.
Es gibt __get, das wird von PHP aufgerufen wenn auf undeklarierte Eigenschaften eines Objekts zugegriffen wird. Diese Methode darf aber nicht statisch implementiert sein.
Meiner Vermutung nach ist in deiner Mitschrift was durcheinander oder unvollständig.
Rolf
moin RolfB,
Es gibt __get, das wird von PHP aufgerufen wenn auf undeklarierte Eigenschaften eines Objekts zugegriffen wird. Diese Methode darf aber nicht statisch implementiert sein.
ach so :)!!! So läuft der Hase. Ich wusste nicht dass in diesem Kontext auch geht Ich denke Dir sehr herzlich.
Meiner Vermutung nach ist in deiner Mitschrift was durcheinander oder unvollständig.
Das kann sehr gut sein. Ich guck mal im Tutorial nach. Danke nochmals.
lgMB
Tach!
hier ist was oberfaul.
Lang::load sollte eine statische Methode aufrufen, aber diese Methode ist nicht statisch implementiert.
Das ergibt nur eine ganz kleine Deprecated-Meldung, wird aber ansonsten ausgeführt.
Methoden mit __ Präfix sind von PHP reserviert, für „magic methods“, aber eine von PHP implementierte __ Methode gibt's in der Doku nicht.
Aber es gibt _()
als Alias zu gettext()
. Das ist eine recht übliche Funktion aus dem Dunstkreis der gettext-Library.
Meiner Vermutung nach ist in deiner Mitschrift was durcheinander oder unvollständig.
Da wird irgendwo __()
als Funktion deklariert worden sein. Wenn man eine IDE hat, die auch die Pfade zu den verwendeten Librarys kennt, genügt ein Tastendruck, um die Quelle zu finden (Go to declaration).
dedlfix.